2017-09-26 82 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 ....我會盡量不要再犯這樣的錯誤:) –