【问题标题】:Django Regex URL pattern overriding other URLs覆盖其他 URL 的 Django 正则表达式 URL 模式
【发布时间】:2023-03-28 18:45:01
【问题描述】:

我正在做一个项目,该项目需要显示有关城市的数据,这些数据是通过 URL 请求的,例如 example.com/city1 以获取 city1 信息等。

我在我的应用程序中使用了以下 url 模式和视图。此视图运行良好。

url(r'^(?P<cityId>[-\w]+)$',views.cityindex,name='cityindex'),

def cityindex(request, cityId):
    city = City.objects.filter(url = cityId)
    if len(city) == 0:
        return redirect('/404')
    return HttpResponse('City Data Extracted')

但是,当我尝试打开其他网址(如 /admin)或其他应用程序的网址时,它会被重定向到我的 cityindex 视图,然后重定向到我在上面的视图中处理的 404 页面。

以下是我在主 urls.py 文件中使用的 url 模式。

url(r'^', include('main.urls')), url(r'^admin/', admin.site.urls), url(r'^login_redirect/', include('loginapp.urls')),

我目前使用的是 Django 1.11.12。有什么办法可以阻止这个 url 被覆盖?

编辑: 我的 main.urls 文件中的网址

url(r'^$',views.index,name='index'),
url(r'^about$', views.aboutpage,name="aboutpage"),
url(r'^terms$', views.termspage,name="termspage"),
url(r'^privacy$', views.privacypage,name="privacypage"),
url(r'^(?P<cityId>[-\w]+)$',views.cityindex,name='cityindex'),

【问题讨论】:

  • 您可以通过添加$ 再试一次吗,例如`url(r'^admin/$', admin.site.urls), `
  • @ShafikurRahman 不工作。 NoReverseMatch at /admin/ Reverse for 'app_list' with keyword arguments '{'app_label': 'main'}' not found. 1 pattern(s) tried: [u'admin/$(?P&lt;app_label&gt;main|auth|error_report)/$']
  • 请对此进行研究。可能是 url 正则表达式相关的问题
  • @SunilTatipelly url 声明顺序很重要,请将您的自定义正则表达式 url 放在底部
  • 你应该显示 main.urls 的内容。

标签: django django-templates django-views


【解决方案1】:

要实现这一点,请考虑这样的场景

1- www.example.com/cityname/  
2- www.example.com/about/Us/
3- www.example.com/others/terms/ 
4- www.example.com/others/privacy/

任何时候您都想拥有其他网址,例如 www.example.com/faculty/list 您使用 数字 2-4 而使用第一个来实现您的城市名称。

我已经测试过它可以在以下格式下工作

 urlpatterns = [
        url(r'^about/us/$', views.about_page), #about us or any other page
        url(r'^(?P<cityname>\w+)/$', views.cityindex), #cityname


    ]

在我的 view.py 中,我可以捕捉到这样给出的城市名称

def cityindex(request, cityname):
    data = cityname
    #you can do anything you want here
    return HttpResponse(data)

注意:cityname 可以是数字,因此您可以决定将其用作城市 id,但是,如果您更喜欢使用 cityid,请确保在您的视图中将其转换为整数

希望对你有帮助

【讨论】:

  • 您好 Akinniyi,感谢您的回答。我已经尝试过了,但我的客户要求它应该只有 /cityid 或 /cityname 类似于 /username 的 instagram 用户配置文件 url。我在想也许在我的 cityindex 函数中,而不是在城市不存在时直接将其重定向到 404 页面,我应该让它检查家中的其他 url。你知道任何类似的解决方法吗?
  • 我已经更新了我的答案以符合你所说的,请检查并反馈给我
猜你喜欢
  • 1970-01-01
  • 2015-02-01
  • 2011-03-22
  • 2013-07-26
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多