2

我有一个用于不同 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 测试似乎有点重......

4

3 回答 3

3

您可以设置一个带有 as值的 url。

{% url 'some-url-name' arg arg2 as the_url %}

{% if the_url in request.path %}
于 2012-07-27T10:40:26.787 回答
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 %}
于 2012-07-27T10:37:39.083 回答
0

您可以在视图中执行此操作,或者编写模板标记。

查看 django 片段,这个看起来不错:http ://djangosnippets.org/snippets/1531/

于 2012-07-27T10:33:38.530 回答