【问题标题】:how to avoid increasing url in django如何避免在 django 中增加 url
【发布时间】:2017-09-26 01:44:36
【问题描述】:

我是 Django 新手,通过开发小项目来学习它。 目前我正在创建登录应用程序。我面临以下问题, 我已经在一个模板中的表单标签上写了:

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

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

]

但问题是随着我继续点击提交按钮 url 不断增加,比如 http://localhost:8000/login_page/ localhost:8000/login_page/Welcome/ localhost:8000/login_page/Welcome/login_page

因此它给出了错误,因为它找不到第三个 url。如何纠正它。 ?我们可以在表单标签中查看视图进行操作吗?

【问题讨论】:

  • 您的表单应该是POST,而不是GET
  • 跟随 slackmart 的回答。这就是你应该这样做的方式,但 URL 这样做的原因是因为你传递了一个没有前面 / 的相对 URL。这只是将其添加到现有 URL 的末尾,并不会转到根目录。

标签: python django django-forms


【解决方案1】:

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

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

Welcome 是网址名称,

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

对其他网址做同样的事情。

文档链接:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#url

【讨论】:

  • 嘿! @neeraj-kumar 是对的。两种表单的表单方法都应该是 POST。
【解决方案2】:

如果你的表单使用 GET 方法,那么不需要 {% csrf_token %} 所以如果你想在表单中使用 GET 方法,请将其删除。

当您从应用网址添加新网址时,请始终使用命名空间概念,这是区分不同应用的相同网址的更好方法

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>

【讨论】:

  • 嘿!你是对的。两种表单的表单方法都应该是 POST。
猜你喜欢
  • 2012-05-15
  • 2016-08-15
  • 2018-08-04
  • 2017-09-13
  • 2020-11-19
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 2014-04-08
相关资源
最近更新 更多