Передача переменной urlname в тег url в шаблоне django - PullRequest
18 голосов
/ 17 июня 2010

Что я хотел бы сделать (для виджета недавних изменений - в данном случае это не виджет django) - передать URL-адрес в мой шаблон в качестве переменной, а затем использовать его так: {% url sitechangeobject.urlname %} Где urlnameстрока, содержащая правильное имя для URL.

Возможно ли это?Шаблон продолжает ломаться, говоря, что не может найти sitechangeobject.urlname в качестве имени (что совершенно верно, его не существует).Есть ли способ заставить ее заглянуть внутрь этой переменной?

Есть и другие способы решения этой проблемы, если нет, просто подумал, что я все же проверю.

Спасибо!

Ответы [ 4 ]

29 голосов
/ 13 декабря 2011

Начиная с Django 1.3, тег {% url %} правильно поддерживает:

{% url view_name_variable %}
{% url 'view_name_string' %}

... это поведение по умолчанию в Django 1.5.

Раньше у вас была только опциясделать это:

{% url view_name_string %}

Чтобы тег работал таким образом в проектах Django 1.3 и 1.4, вам потребуется следующая строка вверху каждого шаблона, в котором вы его используете:

{% load url from future %}

В соответствии с примечаниями к выпуску Django 1.3 :

... в Django 1.5 старое поведение будет заменено новым поведением.Чтобы обеспечить совместимость с будущими версиями Django, существующие шаблоны следует изменить, чтобы использовать новые будущие библиотеки и синтаксис.

Обратите внимание, что поддержка {% load url from future %} была удалена в Django 1.9.

8 голосов
/ 17 июня 2010

Примечание: этот ответ действительно имеет отношение только к версиям django до 1.3. Если вы используете django 1.3 или более позднюю версию, необходимая функциональность является встроенной - см. ответ meshy .

Встроенный тег url не может этого сделать. Однако django-reversetag делает именно это (и даже больше).

Согласно readme, тег reverse, предоставленный этим кодом, обеспечивает:

  • Согласованный синтаксис («строковые литералы» и переменные)
  • Возможность обратного просмотра имен, хранящихся в переменных контекста
  • Частичный реверс
2 голосов
/ 19 августа 2013

для Джанго 1,5 может быть это полезно

обычно для доступа к переменной, переданной из представления мы используем {{Переменная}}

однако для URL в шаблоне следующее не работает: {% url 'app: namespace' {{varible}}%}

просто используйте следующее нормально: {% url 'app: namespace' varible%}

1 голос
/ 17 мая 2013

если вы используете Django 1.5 и выше, django-reversetags больше не требуется для простой передачи имен представлений в качестве переменных в шаблоны для использования в теге url.

Я был смущен доступностьюdjango-reversetags, просто подумал, как правильно обновить вопрос здесь.

...