2010-03-25 20 views
1

我無法只通過{% url %}標記獲取網址的一部分。Django:使用{%url%}查找視圖網址的一部分

的URL設置包含此:

url("^delete/(?P<uuid>[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/$", 
    deleteView, 
    name = "delete"), 

,這意味着它的UUID刪除一個項目(視圖需要一個參數的「uuid」,你可以看到)。由於我不想在URL映射更改時更改所有模板,因此我使用了指定的URL(本例中爲「delete」)。

然後在模板中,我想通過AJAX訪問該URL,但需要使用JavaScript提供UUID參數,所以實際上我只需要URL的/delete/部分。我目前的解決方案是這樣的:

uuid = "some uuid that should be deleted on the server"; 

$.get("{% url myinstancenamespace:delete "00000000-0000-0000-0000-000000000000" %}" 
     .replace("00000000-0000-0000-0000-000000000000", uuid), 
     function(data) 
{ 
    // process server response 
}, "text"); 

這似乎更像是對我的破解。那麼,有沒有比這更好的解決方案?

回答

1

我不得不說,對我來說這聽起來完全不好。

但是,如果你真的不想這樣做,一個選擇是使uuid參數在URLconf中可選,前綴爲?:。當然,你需要在視圖中做更多的驗證,以確保你確實有一個uuid。

+0

然後,我將不得不重新在視圖中的URL,這導致另一個地方必須知道URLconf。那是另一個(更大的)破解IMO。 – AndiDog 2010-03-25 18:08:19

+0

沒有。 uuid仍然會作爲參數傳入,但函數簽名會是'def deleteView(request,uuid = None):',你只需要檢查'如果uuid是None'。 – 2010-03-25 18:27:04

+0

你能編輯你的答案,包括完整的正則表達式,我想我不明白你的意思(不按照我解釋你的答案的方式)。 – AndiDog 2010-03-25 18:53:19