我有2次:a和b都呈现一个模板T.还有A_2和B_2意见。 和T模板应生成URL到A_2和B_2意见。
但我不能使用{%URL%},因为我无法通过URL名称为parametr。
我不能生成视图对整个URL,因为我应该多次做(一个对行的表 - 所以它可能是链接hundreeds)
我不想写2完全相同的模板。 所以,问题是 - 如何避免这种情况?
我有2次:a和b都呈现一个模板T.还有A_2和B_2意见。 和T模板应生成URL到A_2和B_2意见。
但我不能使用{%URL%},因为我无法通过URL名称为parametr。
我不能生成视图对整个URL,因为我应该多次做(一个对行的表 - 所以它可能是链接hundreeds)
我不想写2完全相同的模板。 所以,问题是 - 如何避免这种情况?
这个被固定在Django 1.5。
在之前的版本1.5,您需要使用
{% extends 'base.html' %}
{% load url from future %}
{% url 'name_as_a_string' %}
{% url name_stored_in_variable %}
从https://docs.djangoproject.com/en/dev/releases/1.5/
一个弃用的功能值得一提的是转向“新式” URL标记。 到Django的1.3之前,类似语法{%URL MyView的%}被错误解释(Django的认为是“MyView的”是一个观点的文字名称,而不是一个模板变量命名为MyView的)。 Django的1.3和以上介绍的语法{从未来%%负载URL}在校正的行为,其中MyView的被看作是一个变量带来。
那么,在这种情况下,您可以使用{% if %}
标签,并添加一些条件,它(也许有些varianbles上下文)或编写自定义URL标记。
myapp
templatetags
__init__.py
myapp_urls.py
myapp_urls.py
from django import template
from django.template import Context
from django.template.defaulttags import register
@register.tag(name="custom_url")
def render_map(parser, token):
contents, url_name = token.split_contents()
return CustomURLNode(url_name)
class CustomURLNode(template.Node):
def __init__(self, url_name):
self.url_name = template.Variable(url_name)
def render(self, context):
return reverse(url_name.resolve(context))
在模板:
{% load myapp_urls %}
{% custom_url myvar %}
这是未经测试的代码,并可能包含错误,但编写自定义的模板标签应该是一个很好的解决方案。