Как встроить тег в шаблон URL-адреса в шаблоне django?

Как мне встроить тег в url templatetag в шаблоне django?

Django 1.0, Python 2.5.2

В views.py

def home_page_view(request):
    NUP = {"HOMEPAGE": "named-url-pattern-string-for-my-home-page-view"}    
    variables = RequestContext(request, {'NUP':NUP})
    return render_to_response('home_page.html', variables)

В home_page.html следующие

NUP.HOMEPAGE = {{ NUP.HOMEPAGE }}

отображается как

NUP.HOMEPAGE = named-url-pattern-string-for-my-home-page-view

и следующий URL-адрес с именем pattern работает (как и ожидалось),

url template tag for NUP.HOMEPAGE = {% url named-url-pattern-string-for-my-home-page-view %}

и отображается как

url template tag for NUP.HOMEPAGE = /myhomepage/

но когда {{ NUP.HOMEPAGE }} встроен в {% url ... %} следующим образом

url template tag for NUP.HOMEPAGE = {% url {{ NUP.HOMEPAGE }} %}

это приводит к синтаксической ошибке шаблона

TemplateSyntaxError at /myhomepage/
Could not parse the remainder: '}}' from '}}'
Request Method: GET
Request URL:    http://localhost:8000/myhomepage/
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: '}}' from '}}'
Exception Location: C:\Python25\Lib\site-packages\django\template\__init__.py in __init__, line 529
Python Executable:  C:\Python25\python.exe
Python Version: 2.5.2

Я ожидал, что {% url {{ NUP.HOMEPAGE }} %} перейдет в {% url named-url-pattern-string-for-my-home-page-view %} во время выполнения и будет отображаться как /myhomepage/.

Встроенные теги не поддерживаются в django?

Можно ли написать собственный тег шаблона URL со встроенной поддержкой тегов, чтобы это работало?

{% url {{ NUP.HOMEPAGE }} %}

Если вы нажмете на время, показанное рядом с «отредактировано» (например, «30 минут назад»), вы получите красивую цветную разницу.

kender 01.11.2008 00:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
2 921
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это кажется слишком динамичным. Ты должен делать

{% url named-url-pattern-string-for-my-home-page-view %}

И оставим все как есть. Честно говоря, динамическое заполнение имени тега URL немного странно.

Если вы хотите использовать любой из большого количества различных тегов URL, вам нужно будет сделать что-то вроде этого

{% if tagoption1 %}<a href = "{% url named-url-1 %}">Text</a>{% endif %}

Это кажется многословным, потому что, опять же, динамичная вещь, которую вы пытаетесь достичь, кажется немного странной.

Если у вас есть что-то вроде «семейств» или «кластеров» страниц, возможно, отдельные каталоги шаблонов будут способом лучше управлять этим. Каждый из кластеров страниц может наследовать от базовых шаблонов и переопределять такие мелочи, как эта функция навигации, чтобы все страницы в кластере выглядели одинаково, но имели одно отличие навигации для «локального дома».

Ответ принят как подходящий

Может быть, вы могли бы вместо этого попробовать передать конечный URL-адрес в шаблон?

Что-то вроде этого:

from django.core.urlresolvers import reverse

def home_page_view(request):
    NUP = {"HOMEPAGE": reverse('named-url-pattern-string-for-my-home-page-view')}    
    variables = RequestContext(request, {'NUP':NUP})
    return render_to_response('home_page.html', variables)

Затем в шаблоне NUP.HOMEPAGE должен указать сам URL.

Отправил ошибку в Django. Они должны уметь исправить это на своей стороне.

http://code.djangoproject.com/ticket/10823

Другие вопросы по теме