возвращение ссылки на именованный URL из функции модели - PullRequest
0 голосов
/ 18 сентября 2010

Что ж, наконец-то это произошло, и я наткнулся на проблему, для которой никакое количество гуглов не помогло. (Хотя я могу просто смотреть в неправильном направлении, в этом случае любые указатели в правильном направлении будут хорошими). ​​

Я пытаюсь найти способ вернуть ссылку на именованный URL (с переменными аргументами) из функции модели. Например, если бы у меня была модель:

class Picture(models.Model):
    picture_id = models.AutoField(primary_key=True)
    ...
    def picture_details(self):
        return "{%url picture_details " + str(self.picture_id) + " %}"

Я хотел бы создать ссылку на объект Picture 'pic' в шаблоне:

   ...
   <a href="{{pic.picture_details}}" > details </a>
   ...

Это ссылка на URL с именем picture_details. Тем не менее, в результате получается ссылка в шаблоне: «http: // ..... {% url picture_details x%}» (x - это picture_id).

Я понимаю, что использование <a href = {% url picture_details pic.picture_id %} /> будет работать, однако моя ситуация немного отличается, поскольку ссылки являются частью динамически создаваемой карты изображений. Итак, я хотел бы строку изображения карты:

    <area shape="some_shape" coords="some_coords" href="{{pic.picture_details}}"/>

чтобы получить ссылку на URL-адрес с именем 'picture_details' с аргументом picture_id.

Я надеюсь, что смог четко объяснить свою проблему, но если понадобится дополнительная информация, пожалуйста, дайте мне знать. Заранее большое спасибо за любую помощь,

Greetz

1021 * Марк *

1 Ответ

3 голосов
/ 18 сентября 2010

В этом случае вы должны использовать функцию reverse.Reverse является аналогом стороннего тега шаблона {% url %}.

from django.core.urlresolvers import reverse

class Picture(models.Model):
    picture_id = models.AutoField(primary_key=True)
    ...
    def picture_details(self):
        return reverse('picture_details', args = [self.picture_id])

Из документации:

Если вам нужно использовать что-то похожее на urlВ своем коде тег Django предоставляет следующий метод (в модуле django.core.urlresolvers):

...