2014-02-13 66 views
1

我正在通过Tango使用Django教程。我试图让用户注册的应用程序。但是,当用户按下提交按钮时,我收到以下错误消息:在Django中提交表单时未找到页面(404)

Page not found (404) 
Request Method: POST 
Request URL: http://127.0.0.1:8000/rango/register/rango/register/ 
Using the URLconf defined in tango_with_django_project.urls, Django tried these URL patterns, in this order: 
^admin/ 
^rango/ ^$ [name='index'] 
^rango/ ^about$ [name='about'] 
^rango/ ^add_category/$ [name='add_category'] 
^rango/ ^category/(?P<category_name_url>\w+)/$ [name='category'] 
^rango/ ^category/(?P<category_name_url>\w+)/add_page/$ [name='add_page'] 
^rango/ ^register/$ [name='register'] 
media/(?P<path>.*) 
The current URL, rango/register/rango/register/, didn't match any of these. 

我不确定那个奇怪的路径是如何构建的。这里是登记模板:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Rango</title> 
    </head> 

    <body> 
    <h1>Register with Rango</h1> 

    {% if registered %} 
    Rango says: <strong>thank you for registering!</strong> 
    <a href="/rango/">Return to the homepage.</a><br /> 
    {% else %} 
    Rango says: <strong>register here!</strong><br /> 

    <form id="user_form" method="post" action="rango/register/" 
     enctype="multipart/form-data"> 

     {% csrf_token %} 

     {{ user_form.as_p }} 
     {{ profile_form.as_p }} 

     <input type="submit" name="submit" value="Register" /> 

    </form> 
    {% endif %} 

    </body> 

</html> 

为了得到登记模板,你需要点击索引模板此链接:

<a href="/rango/register">Register Here</a> 

这里是兰戈/ views.py寄存器功能:

def register(request): 
    registered = False 

    if request.method == 'POST': 
    user_form = UserForm(data=request.POST) 
    profile_form = UserProfileForm(data=request.POST) 

    if user_form.is_valid() and profile_form.is_valid(): 
     user = user_form.save() 

     user.set_password(user.password) 
     user.save() 

     profile = profile_form.save(commit=False) 
     profile.user = user 

     if 'picture' in request.FILES: 
     profile.picture = request.FILES['picture'] 

     profile.save() 

     registered = True 

    else: 
     print user_form.errors, profile_form.errors 

    else: 
    user_form = UserForm() 
    profile_form = UserProfileForm() 

    return render(request, 
    'rango/register.html', 
    {'user_form': user_form, 'profile_form': profile_form, 'registered': registered}) 

我相信我错过了一些小东西!

回答

4

不设置URL重写节目前,您的浏览器将"rango/register/"到当前URL的末尾。 如果您将其更改为"./""/rango/register/"它会指向自己,但这些不是最佳实践。

对于最佳实践使用{% url "register" %}代替,这样它会自动更改为你改变你的url.py

如:

<form id="user_form" method="post" action="{% url "register" %}" 
     enctype="multipart/form-data"> 
+1

如果您正在编辑的实例的对象,它会更好使用类似... action =“{%url'edit_author'author_id%}”...其中您的author_id可能已通过视图传递给模板。 – Rexford

0

最有可能的<form action>属性是错误的。

现在比较指出:

rango/register/rango/register/ 

    <form id="user_form" method="post" action="rango/register/" <--- relative 

对于一个快速的解决方法试试(不是最佳做法):

<form id="user_form" method="post" action="/rango/register/" 

代替。

了解相对URL如何在HTML页面中工作,这应该解开这个谜团。

0

这似乎是问题是与你的URLs.py页 - 好像你有Django的