【问题标题】:Url mapping to views in django 1.11URL映射到django 1.11中的视图
【发布时间】:2020-07-18 08:05:10
【问题描述】:

我正在编写一个代码来将 url '/products/new' 映射到它的视图函数'new'。我没有从“新”获取 HttpResponse,而是得到了“index”函数的 HttpResponse,该函数也在 views.py 中

products.py 中我的views.py 代码是--

from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse

def index(request):
  return HttpResponse('This is home page')

def new(request):
  return HttpResponse('New Products')

我在 products.py 中的 urls.py 代码是 --

from django.conf.urls import url
from . import views
urlpatterns=[
      url(r'^', views.index),
      url(r'^new', views.new)
]

我的项目文件里面的urls.py文件是--

from django.conf.urls import url,include
from django.contrib import admin

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

现在,当我访问 127.0.0.1:8000/products 时,我得到了想要的结果,即“这是主页” 但是当我访问 127.0.0.1:8000/products/new 甚至 127.0.0.1:8000/products/new/xxx/xxx 之后的任何随机文本 /products 我得到相同的结果是“这是主页” 我不知道发生了什么。请帮忙。

【问题讨论】:

  • 除了使用include() 时,url() 正则表达式通常应该以美元结尾以匹配字符串的结尾。例如,应该是url(r'^$', views.index),
  • 为什么选择 django 1.11?它已经过时了。
  • @alasdair 是的,应该是。我也这样做了。但我得到相同的结果。不知道为什么它只是映射 /products/ 而不是映射 /products/new
  • @TheGuardener 是的。我也不想要它,但由于锁定我的系统和其他东西卡在其他地方。我正在使用本身已经过时的其他系统。
  • @WonderwareInTouchUsers 好的。但是更新没那么难

标签: python django django-views url-routing


【解决方案1】:

在你的项目 urls.py 中添加这个 url 模式

url(r'^products/(?P<new>)/$', views.new),

【讨论】:

  • 谢谢。是的,我想它会起作用的。但正如文档中所建议的那样,当我有很多应用程序时,它可能会变得重复。因此,我使用包含功能来包含产品的 url 文件。
【解决方案2】:

@alasdair 谢谢。

将美元添加到 r'^new/$' 是正确的,因为它会阻止它匹配 new/something/else。但是通过阻止它匹配新的,将美元添加到 ^$ 解决了问题

所以 products 应用程序的 urls.py 中的更正代码是 -

from django.conf.urls import url
from . import views
urlpatterns=[
      url(r'^$', views.index),
      url(r'^new/$', views.new)
]

【讨论】:

    猜你喜欢
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    相关资源
    最近更新 更多