找不到Django i18n URL媒体文件

时间:2019-03-27 14:42:58

标签: django-i18n

我在Django项目中激活了i18n,并在urls.py中使用了i18n_patterns。只要URL中的语言代码更改,所有翻译都能正常工作并更改。问题出在媒体文件夹中的图片上。

我在媒体文件夹中有几张图片作为滑块背景,并且每隔几秒钟就会更改一次。使用此i18n_patterns,它从/en/media/而不是/media/读取媒体文件。在这种情况下,我只为英语创建了/en/media/文件夹,为中国人创建了相同的文件夹/zh/media/文件夹。但是问题是,即使图像在那里,它也总是返回404。 /zh/media/文件夹中的所有图像均未显示。 /en/media/文件夹中仅显示4张图像中的2张。这让我很困惑。希望你们对这里发生的事情有任何了解。

以下是相关文件中代码的一部分:

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 个答案:

答案 0 :(得分:0)

使用<img src="media/{% image_file_name %}" />是一种不好的做法。

<img src="{{ image_field.url }}" />执行此操作。该网址将正确呈现。您可以在official docs中阅读有关此主题的更多信息。