2013-05-29 18 views
1

HTML表單:只有一個字母從模板觀點功能

<form id="save_form" method="post" action="{% url 'project_save' usernames=username project_name='lion' %}"> 

通知的ARG「PROJECT_NAME的值是 '獅子'

views.py:

def projectz_save(request, usernames, project_name): 
    template = loader.get_template('project_view/index.html') 
    context = RequestContext(request, {"username": usernames, "project": project_name}) 
    return HttpResponse(template.render(context)) 

urls.py:

urlpatterns = patterns('', 
url(r'^$', views.index, name='index'), 
url(r'^(?P<usernames>\w+)(?P<project_name>\w+)save$', views.projectz_save, name='project_save'), 
) 

會發生什麼情況,只有'獅子'中的'n'被作爲參數傳遞。當我重新渲染頁面時,模板變量「project」現在具有值'n'而不是'獅子'。任何想法爲什麼發生這種情況?

如果我使用變量而不是字符串(這顯然是最終目標),但是甚至簡化爲簡單的字符串仍然發生。

+0

和你的urls.py? – karthikr

+0

編輯在那裏..感謝您的參觀 – sugarmuff

+0

爲什麼你有'保存'在url模式的結尾? – karthikr

回答

1

你的問題是,雖然模板正確構造的URL,你的urls.py正則表達式太貪婪。

具體來說,你有你的用戶名命名的組和項目名稱命名的組之間沒有分隔:

r'^(?P<usernames>\w+)(?P<project_name>\w+)save$' 

鑑於字字符的序列,除了最後將通過用戶名組中的\w+匹配。最後一個將與project_name組匹配,因爲+需要至少一個字符。因此,如果用戶名在模板是「johndoe的」,該url標籤將構造URL:

johndoelionsave 

的正則表達式將會再搭配johndoelio作爲用戶名組,因爲所有這些都是由\w+n作爲PROJECT_NAME匹配組,因爲它與\w+匹配,然後是固定的save和字符串末尾部分。

你最好的解決辦法是分解URL模式,以便解析是明確的。我建議:

r'^(?P<usernames>\w+)/(?P<project_name>\w+)/save$' 

在這種情況下,模板標籤會產生:

johndoe/lion/save 

和正則表達式將解析出你想要的細節。