2013-06-01 30 views
2

讓我們考慮這個模板部分URL模板可選PARAM

<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

也許'{%URL client_edit的client_id = CLIENT_ID | default_if_none: 「」 %}'(!當然不是測試) –

+1

這種形式是否與模型有關? –

+0

此ID與2個模型表單相關。問題已更新。 @ TimmyO'Mahony我的url模式不允許空的'client_id',它應該改變它嗎? –

回答

1

這不是使用

{% url client_edit %} 

因爲你actualy定義兩個URL的重複。如果你真的想使它更短的(沒有必要simplier),你可以創建一個像

{{client_id|make_url}} 

一些過濾器和過濾器內,你可以解析正確的URL

+0

這可能是一個想法,在這種情況下,我會嘗試創建一個採用參數中的url名稱,因爲我需要它爲我的所有CRUD。我覺得很奇怪,沒有簡單的方法來做到這一點。 –

+0

也許我應該只使用一個帶有可選參數的URL –

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 
+0

+1。您也可以使用'default:-1'過濾器類型 – karthikr