Шаблон URL Django Regex, перекрывающий другие URL - PullRequest
0 голосов
/ 24 января 2019

Я работаю над проектом, который требует отображения данных о городе, который запрашивается через URL, например example.com/city1 для получения информации о городе1 и т. Д.

Я использовал приведенный ниже шаблон и представление 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')

Но когда я пытаюсь открыть другие URL-адреса, такие как /admin или URL-адреса из другого приложения, они перенаправляются на мой cityindex вид, а затем на страницу 404как обработано в моем представлении выше.

Ниже приведены шаблоны URL, которые я использовал в своем основном файле urls.py.

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

В настоящее время я использую Django 1.11.12.Можно ли как-то помешать переопределению этого URL?

Редактировать: 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'),

1 Ответ

0 голосов
/ 25 января 2019

Чтобы достичь этого, подумайте о sceanarios как этот

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

Каждый раз, когда вы хотите, чтобы другой URL-адрес, например 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)

Примечание: название города может быть числом, поэтому вы можете вместо этого использовать его в качестве идентификатора города, однако убедитесь, что оно было преобразовано в целое число, если выпредпочитаю использовать cityid

Надеюсь, это поможет

...