2012-07-27 20 views
2

我有一個用於不同url的模板(在這種情況下:/create//edit/[PK of an item],在url.py中名爲「create」和「edit」)。Django:在模板中測試url正則表達式

我想在我的模板中顯示不同的東西,具體取決於我是/編輯/還是/創建/。

我該如何檢查? {% if '/create' in request.path %}工作,但我想使用一個url標記(或等效,沒有它「硬編碼」)。 我想要做什麼看起來像(在僞代碼 - 這不起作用){% if request.path in url create %} XXX {% endif %}

我應該在views.py中做所有必要的測試,在上下文中發送關於它的變量,在模板中測試這個變量?在我的情況下,對於簡單的URL測試來說似乎有點沉重......

回答

2

我會說去製造兩種看法,如果它是一個顯著的差異(不同形式等) - 消除模板URL邏輯完全,且無真正的'測試'需要 - 不必檢查request.path/pass url/etc。

網址

urlpatterns = patterns('', 
    (r'^create/$', create), 
    (r'^edit$', edit), 
) 

意見

def create(request): 
    text = "Create something" 
    return render_to_response('same-template.html', {'text': text}, context_instance=RequestContext(request) 

def edit(request): 
    text = "Edit something" 
    return render_to_response('same-template.html', {'text': text}, context_instance=RequestContext(request) 

模板

{% text %} 

也可以將多個通道與列表這樣太容易安格斯:

意見

def create(request): 
    data = [] 
    data['text'] = "Create something" 
    data['form'] = CreateForm() 
    return render_to_response('same-template.html', {'data': data}, context_instance=RequestContext(request) 

def edit(request): 
    data = [] 
    data['text'] = "Edit something" 
    data['form'] = EditForm() 
    return render_to_response('same-template.html', {'data': data}, context_instance=RequestContext(request) 

模板

{% data.text %} 
{% data.form %} 
3

您可以設置url with a as值。

{% url 'some-url-name' arg arg2 as the_url %} 

{% if the_url in request.path %} 
+0

JamesO,感謝您的回答,但:我的 「編輯」 鏈接不是一個固定的URL,但正則表達式:'URL(R 「?^編輯/(P \ d +)/ $」,MyEditView.as_view (),name = edit)'。有沒有一種方法可以用這種方式(用'with')? – 2012-07-28 17:55:33

+0

自從Django 1.8棄用 - https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#s-url – 2016-03-23 16:23:13

+0

@ChemicalProgrammer,歡呼聲,以clarfy,它的虛線路徑已貶值,而不是'作爲',這是我的建議,將編輯。 – JamesO 2016-03-24 08:00:51