Django Regex URL模式覆盖其他URL

时间:2019-01-24 02:44:38

标签: django django-templates django-views

我正在从事一个项目,该项目需要显示有关城市的数据,该数据是通过诸如example.com/city1之类的网址请求的,以获取city1信息等。

我在我的应用中使用了以下网址格式和视图。此视图工作正常。

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之类的其他URL或其他应用程序的URL时,它会被重定向到我的cityindex视图,然后再重定向到上述视图中处理的404页面。

下面是我在主urls.py文件中使用的网址格式。

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

我目前正在使用Django 1.11.12。有什么方法可以阻止该网址被覆盖?

编辑: 在我的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'),

1 个答案:

答案 0 :(得分: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)

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

我希望这对您有帮助