让我们考虑一下这个模板部分
<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'),
答案 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