【问题标题】:Django: test url regex in templateDjango:在模板中测试 url 正则表达式
【发布时间】:2012-07-26 00:37:39
【问题描述】:

我有一个用于不同 url 的相同模板(在本例中:/create//edit/[PK of an item],在 url.py 中命名为“create”和“edit”)。

我想在我的模板中显示不同的内容,具体取决于我是在 /edit/ 还是 /create/ 上。

我如何检查这个? {% if '/create' in request.path %} 有效,但我想使用一个 url 标签(或等效的,不要让它“硬编码”)。 我想做的看起来像(在伪代码中 - 这不起作用){% if request.path in url create %} XXX {% endif %}

我应该在views.py中进行所有必要的测试,在上下文中发送一个关于它的变量,在模板中测试这个变量吗?就我而言,简单的 url 测试似乎有点重......

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    您可以设置url with a as 值。

    {% url 'some-url-name' arg arg2 as the_url %}
    
    {% if the_url in request.path %}
    

    【讨论】:

    • JamesO,感谢您的回答,但是:我的“编辑”网址不是固定网址,而是正则表达式:url(r"^edit/(?P<pk>\d+)/$", MyEditView.as_view(), name=edit)。有没有办法我可以使用这种方式(使用with)?
    • @ChemicalProgrammer,干杯,澄清一下,它的虚线路径已被贬值,而不是“as”,这是我建议的答案,将编辑。
    • @JameO 是的,你是对的。我的评论可能会产生误解。很抱歉。
    【解决方案2】:

    如果有显着差异(不同的形式等),我会说制作两个视图 - 完全消除模板中的 url 逻辑,也不需要真正的“测试” - 不必检查 request.path /pass url/etc.

    网址

    urlpatterns = patterns('',
        (r'^create/$', create),
        (r'^edit$', edit),
    )
    

    观看次数

    def create(request):
        text = "Create something"
        return render_to_response('same-template.html', {'text': text}, context_instance=RequestContext(request)
    
    def edit(request):
        text = "Edit something"
        return render_to_response('same-template.html', {'text': text}, context_instance=RequestContext(request)
    

    模板

    {% text %}
    

    也可以通过这种方式轻松地通过列表传递多个更改:

    观看次数

    def create(request):
        data = []
        data['text'] = "Create something"
        data['form'] = CreateForm()
        return render_to_response('same-template.html', {'data': data}, context_instance=RequestContext(request)
    
    def edit(request):
        data = []
        data['text'] = "Edit something"
        data['form'] = EditForm()
        return render_to_response('same-template.html', {'data': data}, context_instance=RequestContext(request)
    

    模板

    {% data.text %}
    {% data.form %}
    

    【讨论】:

      【解决方案3】:

      要么在视图中完成,要么编写模板标签。

      在 django sn-ps 上看,这个看起来不错:http://djangosnippets.org/snippets/1531/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-01
        • 2015-09-02
        • 1970-01-01
        • 2011-03-22
        • 2013-07-26
        • 2014-07-08
        • 1970-01-01
        相关资源
        最近更新 更多