Настройка 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).

Вернуться на верх