URL模板可选参数

时间:2013-06-01 08:48:08

标签: django django-urls

让我们考虑一下这个模板部分

<form class="form-horizontal" action="{% if client_id %}
    {% url client_edit client_id=client_id %}{% else %}
    {% url client_edit %}
    {% endif %}" method="post">{% csrf_token %}
{{ client_form }}
</form>

如您所见,参数client_id是可选的。

有没有办法避免这种重复(url client_edit)?


网址格式:

url('^client/edit$', client_edit, name='client_edit'),
url('^client/edit/(?P<client_id>\d+)$', client_edit, name='client_edit'),

2 个答案:

答案 0 :(得分:1)

不是重复使用

{% url client_edit %}

因为你实际上定义了两个网址。如果你真的想让它更短(不必更简单),你可以创建一些像

这样的过滤器
{{client_id|make_url}}

并在内部过滤器中,您可以解析为正确的网址

答案 1 :(得分:1)

网址没有可选参数。您可以将多个模式指向同一视图(就像您所做的那样),然后检查视图中的默认值。在您的模板{% url client_edit client_id=client_id|default_if_none:-1 %}中,然后根据您想要在视图结束过滤器上发生的事情进行适当的处​​理:

def client_edit(request, client_id = None):
    if client_id:
        client = get_object_or_404(Client, pk=client_id)
    else:
        # Default value for client
        client = Client.objects.filter(active=True) # for example 
    # your normal logic here