@kkolorid

Как правильно организовать urls.py для разнх городов?

Как правильно организовать urls.py для разных городов? Примеры запросов: /moskva/obuchenie/, /volgograd/obuchenie/, /obuchenie/. То есть один и теже view должны работать и при указани города в начала url и без его указания, также должны быть возможнсть брать эти горда из БД. Сделал что-то типа такого, но не работает:

pages = [
    path('', views.index),
    path('home/', views.index, name='home'),
    path('obuchenie/', views.obuchenie, name='obuchenie'),
]

citys = City.objects.all()

city_urls = []

for city in citys:
    if city.url:
        city_urls.append(path(city.url + '/', include(pages)))

city_urls.append(pages)

pprint(city_urls)

urlpatterns = [
    path('admin/', include([
        path('', admin.index),
        path('home/', admin.index, name='home'),
        path('config/', include([
            path("index/", login_required(admin.FilteredConfigListView.as_view()), name='config/index'),
            path("edit/<int:id>/", admin.config, {'action': 'edit'}, name='config/edit'),
        ]), name='config'),
        path('login/', admin.UserLoginView.as_view(), name='login'),
        path('logout/', admin.UserLogoutView.as_view(), name='logout'),
    ])),
    path('set-city/<str:city>', views.set_city, name='set-sity'),
    path("ckeditor5/", include('django_ckeditor_5.urls'), name="ck_editor_5_upload_file"),
    path("robots.txt",
        TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
    ),
] + city_urls

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


Дает почему-то AttributeError: 'list' object has no attribute 'resolve'

Проще ли это организовать через path("<str:city>/", include(pages)) ?
  • Вопрос задан
  • 73 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
В очередной раз фигну делаешь, при добавление города тебе надо будет перезагружать django

Достаточно просто один раз добавить
'<str:city>/, '<str:city>/home/', '<str:city>/obuchenie/'
и в каждом запросе доставать city, если его нет, выдавать 404
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы