【问题标题】:How to embed a tag within a url templatetag in a django template?如何在 django 模板的 url 模板标签中嵌入标签?
【发布时间】:2010-09-20 06:32:52
【问题描述】:

如何在 django 模板的 url templatetag 中嵌入标签?

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

并且以下名为 pattern 的 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 }} %}

【问题讨论】:

  • 如果你点击显示在“已编辑”附近的时间(比如“30 分钟前”),你会得到漂亮的彩色差异

标签: python django url templates templatetag


【解决方案1】:

向 Django 发布了一个错误。他们应该能够解决这个问题。

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

【讨论】:

    【解决方案2】:

    也许您可以尝试将最终 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 本身。

    【讨论】:

      【解决方案3】:

      这似乎太动态了。你应该这样做

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

      就这样吧。动态填写 URL 标记的名称——坦率地说——有点奇怪。

      如果你想使用大量不同的 URL 标签中的任何一个,你必须这样做

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

      这似乎是冗长的,因为你试图实现的动态目标似乎有点奇怪。

      如果您有类似“家族”或“集群”页面的内容,那么单独的模板目录可能是一种更好地管理它的方法。每个页面集群都可以从基本模板继承并覆盖诸如此导航功能之类的小东西,以保持集群中的所有页面看起来相似但对于“本地主页”具有一个导航差异。

      【讨论】:

        猜你喜欢
        • 2022-11-25
        • 2010-12-19
        • 2011-10-07
        • 2015-03-28
        • 2014-03-20
        • 1970-01-01
        • 2012-07-09
        • 1970-01-01
        • 2011-02-09
        相关资源
        最近更新 更多