Django 静态文件的多语言支持
在 Django 中,静态文件指的是 CSS、JavaScript、图片等不需要动态生成的文件。在多语言网站中,我们需要为不同语言版本的页面提供相应的静态文件。
首先,我们需要在项目的 settings.py 文件中设置静态文件的目录:
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
然后,在模板中使用静态文件时,我们需要使用 Django 提供的静态文件模板标签。例如,使用以下代码引入静态文件:
{% load static %} <link rel="stylesheet" href="{% static 'css/style.css' %}">
为了支持多语言,我们需要在静态文件的文件名中包含语言代码。例如,我们可以在文件名中添加语言代码作为前缀,如“en_style.css”、“zh_style.css”。
可是这种做法不够优雅,我们可以使用 Django 提供的 i18n URL 标志来实现更简洁的多语言静态文件管理。我们可以在 URLs 中使用 i18n URL 标志来匹配带有语言代码前缀的静态文件 URL。例如:
from django.urls import path, re_path, i18n_patterns ... urlpatterns += i18n_patterns( ... re_path(r'^static/(?P<lang>[a-z]{2})/(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT}), ... )
其中,“lang”是语言代码,而“path”则是静态文件的路径。我们可以在模板中使用以下代码引入静态文件:
{% load i18n static %} <link rel="stylesheet" href="{% static 'css/style.css' %}?{% language %}">
这样,系统会自动根据当前语言版本为静态文件生成带有语言代码前缀的 URL,避免了手动添加语言代码的麻烦。
相关文章