Настройка APPEND_SLASH в Django не работает со статикой, почему?
Настройка Django 4.1.1 APPEND_SLASH
автоматически добавляет слеш /
, пока я не добавлю статические корни, т.е. urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
.
Например, это работает с http://127.0.0.1:8000/admin
и http://127.0.0.1:8000/admin/
urlpatterns = [
path('', home),
path('admin/', admin.site.urls),
]
Однако, добавив мои статические корни, настройка больше не действует:
urlpatterns = [
path('', home),
path('admin/', admin.site.urls),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Почему? Является ли это ошибкой? Как urlpatterns += static
и т.д. влияет на настройки Django?
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('AppName.urls')),#(if you have any app created)
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Попробуйте этот способ
Когда вы добавляете static
в URLconf, он берет все URL, которые не соответствуют существующим шаблонам URL, и пытается обслужить их через представление django.views.static.serve
, которое не соблюдает settings.APPEND_SLASH
.
Это должно быть проблемой только в разработке, так как в продакшене вы будете обслуживать статические файлы через nginx/apache/whatever, но это хорошая возможность для вас санировать все ваши URL в шаблонах и т.д., чтобы включить косую черту (подсказка: используйте тег шаблона {% url %}). Вы не сможете ничего сделать с пользователями, набирающими URL напрямую без косой черты, но опять же, это только в разработке.
Вы также можете использовать Whitenoise в разработке, чтобы обойти это (http://whitenoise.evans.io/en/stable/django.html).