两种语言,一种视图,不同的网址路径



我有一个有两种语言的django项目。我想要实现的是根据当前语言拥有不同的 url 路径。 不是很好,但有效的解决方案是:

urls.py

urlpatterns = [
...
url("strefa-klienta/", views.client_zone, name="strefa_klienta"),
url("client-zone/", views.client_zone, name="client-zone"),
...
]

vievs.py

def client_zone(request):
return render(request, "client_zone.html")

模板.html

{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% if LANGUAGE_CODE == 'pl-PL' %}
<a href="{% url 'strefa_klienta' %}">{% trans 'Client zone' %}</a>
{% else %}
<a href="{% url 'client_zone' %}">{% trans 'Client zone' %}</a>
{% endif %}

结果还可以,我得到了网址:

  • domain.com/strefa-kleinta/- 波兰语
  • domain.com/client-zone/- 用于休息语言

呈现相同的视图,但是...它不灵活。也许您可以提供帮助并提出更优雅的解决方案?

你可以使用 Django 的路径转换器来实现这个目的。为此,您应该使用自定义正则表达式路径转换器。它将匹配单个 URL 的任何匹配字符串,您可以在视图中使用kwargs访问所使用的字符串。

将 urls.py 更改为正则表达式路径,以将模式与字符串匹配:

from django.urls import re_path # Use re_path for Django > 2 else path
urlpatterns = [
re_path(r'^(?P<lang_code>strefa-klienta|client-zone)/$', views.client_zone, name="client_zone_view"),
]

要了解 views.py 中使用的语言,请查看kwargs

def client_zone(request, *args, **kwargs):
lang_code = kwargs.get('lang_code')
# You can send the lang_code in context in case you need it in template
return render(request, "client_zone.html", context={'lang_code':lang_code})

最新更新