2017-09-26 84 views
1

我是Django的新手,并通过开发小型项目来学习它。 目前我创建登录app.I现在面临跌破发行, 我已经在一个模板写在表单标签:如何避免在Django中增加url

<form method="GET" action="login_page/"> 
    {% csrf_token %} 
    <button type ="submit"> Login</button> 
</form> 

点击提交按钮,我去登录/页网址之后。

而且在我写了下面的表单标签的其他模板,

<form method="GET" action= "Welcome/"> 
     {% csrf_token %} 
     <button type ="submit"> Sign Up</button> 
</form> 

和我的网址是:

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^login_page/', include('login.urls')) 
] 

URL模式= [

#url(r'^$',TemplateView.as_view(template_name='base.html'),name='base'), 
    url(r'^$',views.HomeView.as_view(),name='home'), 
    url(r'^Welcome/$', views.WelcomeView.as_view(), name='Welcome'), 
    #url(r'^Welcome/$',TemplateView.as_view(template_name='Welcome.html'),name='Welcome'), 
    url(r'^logout/$',TemplateView.as_view(template_name='Logout.html'),name='Logout'), 
    url(r'^home/$',views.HomeView.as_view(),name='home') 

]

但我ssue是我的推移和点击提交按钮网址不断增加,像 http://localhost:8000/login_page/ 本地主机:8000/login_page /首页/ 本地主机:8000/login_page /首页/ login_page

,因此它提供了错误,因为它无法找到第三个网址。如何纠正它。 ?我们可以去表单标签中的操作视图吗?

+1

你的形式应该是一个'POST',而不是一个'GET' – MrE

+0

与slackmart的答案一起去。这就是你应该这么做的原因,但是URL的原因是因为你传递了一个没有前面'/'的相对URL。这只是将其添加到现有URL的末尾,并不会转到根目录。 –

回答

1

使用url模板标签。通过这样做,这个助手模板标签就会自动将url替换为正确的url。

<form method="POST" action="{% url 'Welcome' %}"> 

其中Welcome是URL名称,

url(r'^Welcome/$', views.WelcomeView.as_view(), name='Welcome'), 
                 #^this one 

不要与其他网址相同。如果使用表单GET方法https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url

+0

嘿! @ neeraj-kumar是对的。表单方法应该是两种形式的POST。 – slackmart

+0

非常感谢..现在工作正常..... –

0

第一件事,那么没有必要的{%csrf_token%}所以,如果你想在套用GET方法将其删除:

链接到文档。

当您从应用程序的网址都添加新的URL,然后一直使用的命名空间的概念,是更好的方式来使不同的应用程序

的相同的URL之间的差异
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^login_page/', include('login.urls', namespace='login_page')) 
               #^add namespace 
] 


<form method="GET" action= "{% url 'login_page:Welcome' %}"> 
     <button type ="submit"> Sign Up</button> 
</form> 
+0

嘿!你是对的。表单方法应该是两种形式的POST。 – slackmart

+0

谢谢neeraj ....我会尽量不要再犯这样的错误:) –