Как встроить тег в тег шаблона URL в шаблоне Django? - PullRequest
3 голосов
/ 31 октября 2008

Как мне вставить тег внутри URL шаблона тега в шаблоне 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 работает (как и ожидалось),

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 }} %}

Ответы [ 3 ]

2 голосов
/ 01 ноября 2008

Может быть, вместо этого вы можете попробовать передать окончательный 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.

0 голосов
/ 15 апреля 2009

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

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

0 голосов
/ 31 октября 2008

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

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

И оставь это на этом. Динамически заполнять имя тега URL - честно говоря - немного странно.

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

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

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

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

...