2

让我们考虑这个模板部分

<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'),
4

2 回答 2

1

url 没有可选参数。您可以让多个模式指向同一个视图(就像您所做的那样),然后检查视图中的默认值。在您的模板中{% 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
于 2013-06-11T07:47:58.790 回答
1

这不是重复使用

{% url client_edit %}

因为您实际上定义了两个网址。如果你真的想让它更短(不需要更简单),你可以创建一些过滤器,比如

{{client_id|make_url}}

在过滤器内部,您可以解析为正确的 url

于 2013-06-10T22:20:17.043 回答