2017-09-26 3 views
1

Je suis nouveau à Django et l'apprentissage en développant de petits projets. Actuellement je crée App.I de connexion ci-dessous fais face à problème, je l'ai écrit sur l'étiquette de formulaire dans un modèle:comment éviter d'augmenter url dans django

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

après avoir cliqué sur le bouton soumettre i passe pour se connecter/URL de la page.

Et dans l'autre modèle que j'ai écrit ci-dessous balise form,

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

et mes urls sont:

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

urlpatterns = [

#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') 

]

mais le je quest est que je conTInuE et cliquez sur les boutons d'envoi url ne cesse d'augmenter, comme http://localhost:8000/login_page/ localhost: 8000/login_page/Accueil/ localhost: 8000/login_page/Accueil/login_page

et donc il donne l'erreur car il ne peut pas trouver 3ème url. comment le corriger. ? pouvons-nous aller aux vues pour l'action dans l'étiquette de forme?

+1

Votre formulaire doit être un 'POST', pas' GET' – MrE

+0

Allez avec la réponse de Slackmart. C'est comme cela que vous devriez le faire, mais la raison pour laquelle l'URL le fait est que vous passez une URL relative sans un '/' précédent. Cela l'ajoute simplement à la fin de l'URL existante et ne va pas à la racine. –

Répondre

1

Utilisez la balise de modèle d'URL. Ce faisant, cette balise de modèle d'aide remplacera automatiquement l'URL avec son URL correcte.

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

Welcome est le nom d'URL,

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

Faites la même chose avec les autres urls.

Lien vers les docs: https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url

+0

Hey! @ neeraj-kumar a raison. La méthode de formulaire doit être POST pour les deux formulaires. – slackmart

+0

Merci beaucoup .. ça marche bien maintenant ..... –

0

La première chose Si votre formulaire en utilisant la méthode GET alors pas besoin de {% csrf_token%} Alors retirez-le si vous voulez méthode GET en forme.

Lorsque vous ajoutez URL App urls puis utilisez toujours notion d'espace de noms qui est meilleure façon de faire la différence entre les mêmes URL de différentes applications

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

Hey! Tu as raison. La méthode de formulaire doit être POST pour les deux formulaires. – slackmart

+0

merci neeraj .... je vais essayer de ne pas faire une telle erreur à nouveau :) –