2013-05-29 16 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 

和正则表达式将解析出你想要的细节。