Медиафайл с URL-адресом Django i18n не найден

#django-i18n

#django-i18n

Вопрос:

Я активировал i18n в своем проекте Django и использовал i18n_patterns в своем urls.py . Все переводы работают нормально и меняются всякий раз, когда меняется код языка в URL. Проблема связана с изображением в папке мультимедиа.

У меня есть несколько картинок в папке media в качестве фона слайдера, и они меняются каждые несколько секунд. С помощью этого i18n_patterns он считывает медиафайлы из /en/media/ вместо /media/ . В этом случае я создал /en/media/ папку только для английского языка и такую же папку /zh/media/ folder для китайского. Но проблема в том, что он всегда возвращает 404, даже если изображения есть. Все изображения в /zh/media/ папке не отображаются. И отображаются только 2 из 4 изображений в /en/media/ папке. Это меня очень смущает. Надеюсь, у вас, ребята, есть хоть какое-то представление о том, что здесь происходит.

Ниже приведена часть кода в связанных файлах:

settings.py

 LANGUAGE_CODE = 'en'

TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale')
]

LANGUAGES = [
    ('en', _('English')),
    ('zh', _('Chinese')),
]

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

  

urls.py

 urlpatterns = [

]

urlpatterns  = i18n_patterns(
    path('admin/', admin.site.urls),
    path('', include('pages.urls')),
)   static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  

template.html

 <img src="media/{% image_file_name %}" />
  

На консоли он отображается следующим образом, даже если файл присутствует.

 [TIMESTAMP] "GET /zh/media/XXX.jpg HTTP/1.1" 404 2798
  

Ответ №1:

Это плохая практика для использования <img src="media/{% image_file_name %}" /> .

Вместо этого сделайте это <img src="{{ image_field.url }}" /> . URL-адрес будет правильно отображен с использованием этого. Вы можете прочитать больше по этой теме в официальных документах.