如何根据所选的语言前缀动态更改网址

时间:2019-09-10 13:09:49

标签: django django-templates

我在Django项目中有2种语言。基数是site / pl /,第二个是site / en。 header.html中还有2个按钮可以切换语言(在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')

app 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'),
]

在header.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,
)

1 个答案:

答案 0 :(得分:0)

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

观看次数

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>