2011-05-24 63 views
0

脫鉤的URL文件到我們的應用程序後,我們所面臨的問題:Django的url處理?

例子:

http://www.oursite.com/ourprefix/xyz/wsz

  1. 如何處理的URL模板(以適應在URL任何前綴(ourprefix))
  2. 如何做HttpResponseRedirect沒有硬編碼的網址(這裏也有前綴問題)
+2

你是什麼意思的「處理」模板中的網址?只要把它們放在錨的href屬性中... – 2011-05-24 13:26:12

+2

你能更具體一些嗎?你與前綴有什麼關係?這應該只是一個簡單的正則表達式在urls.py – silent1mezzo 2011-05-24 13:28:29

+0

你可以在你的問題更具體嗎?好像你在你的網址中添加了語言前綴。 – dzen 2011-05-24 13:37:00

回答

1

如果我理解你是正確的,你想解析一個特定的視圖到模板中的URL?

您應該在Django中使用url-reverse方法。見here

1)爲模板,你可以使用:

<a href="/path/to/{{prefix}}/xyz"> Link </a> 

當「前綴」是在上下文中設置的變量,你傳遞給模板。您還可以動態地選擇正確的網址:

{% url application.views.viewfunc parameter1 parameter2 %} 

詳情請參閱here

2)因此,要HttpResponseRedirect,你可以這樣做:

HttpResponseRedirect(reverse(your_view_function)) 

它也接受參數。

+0

我是否必須自行放置{{prefix}},或者有些系統會爲我執行此操作?是應用程序以某種方式自動神奇地意識到該前綴。 – user505160 2011-05-24 13:51:33

+1

你不會說這個前綴是如何提供的,但假設你剛剛通過設置WSGI別名來完成它,那麼Django自動知道它。 – 2011-05-24 14:04:39

3

使用named urlsurls.py

  1. 使用{% url name %}模板標籤。它會插入正確的路徑。
  2. 使用reverse('name', **kwargs)作爲重定向。

一個例子:

在凸出/ urls.py

patterns = patterns('', 
    (r'^prefix/', include('proj.app.urls')), 
) 

在凸出/應用/ urls.py:

patterns = patterns('', 
    url(r'object/^(?P<pk>\d+)/edit/', edit_object_view, name="edit"), 
) 
在凸出/應用/視圖

。 py:

return HttpResponseRedirect(reverse('app:edit', {'pk':pk})) 

in proj/app/templates/app/my_template.py:

<a href="{% url app:edit pk=pk %}"> <!-- generates /prefix/object/123/edit/ -->