如何根据所选语言前缀动态更改 URL



我在 Django 项目中有 2 种语言。Base 是 site/pl/,第二个是 site/en。 标题中还有 2 个按钮.html用于切换语言(为 url 添加前缀(。字符串翻译工作正常。我的问题是: 1.当我在语言之间切换(单击按钮(时,我想加载主页,因为我知道它仅在我在主页上时才有效 - 因此,如果我移动到任何子页面并单击语言按钮,它会重新加载同一页面(不是主页(。 2.当我在语言之间切换时,我还想将子页面URL更改为正确的名称。

我尝试了一些奇怪的方法来做到这一点:

<li><a href="{{baseurl}}">PL</a></li>
<li><a href="{{en_url}}">EN</a></li>

然后在视图中:

def index(request, *args, **kwargs):
baseurl = '/'
en_url = baseurl + 'en'
return render(request, 'home.html', {'baseurl': baseurl, 'en_url': en_url})

但我认为这很糟糕。

这是我的代码:

views.py

def index(request, *args, **kwargs):
return render(request, 'home.html')
def about(request, *arg, **kwargs):
return render(request, 'about.html')
def offer(request, *arg, **kwargs):
return render(request, 'offer.html')
def contact(request, *arg, **kwargs):
return render(request, 'contact.html')

应用 urls.py

from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('o-nas', views.about, name='about'),
path('oferta', views.offer, name='offer'),
path('kontakt', views.contact, name='contact'),
]

在标题中.html

<li><a href="{% url 'index' %}">PL</a></li>
<li><a href="{% url 'index' %}">EN</a></li>

项目 urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
path(r'^i18n/', include('django.conf.urls.i18n')),
path('admin/', admin.site.urls),
]
urlpatterns += i18n_patterns(
path('', include('pages.urls')),
prefix_default_language=True,
)

我认为您缺少一个网址。我会做这样的事情。

视图

def index(request, *args, **kwargs):
return render(request, 'home.html')
def index_EN(request, *args, **kwargs):
return render(request, 'home_en.html')

不要忘记创建一个"home_en.html"模板。 然后在网址中添加:

urlpatterns = [
path('', views.index, name='index'),
path('en/', views.index_EN, name='index_en'),

然后在模板中您可以使用:

<li><a href="{% url 'index' %}">PL</a></li>
<li><a href="{% url 'index_en' %}">EN</a></li>

最新更新