parler.views module¶
The views provide high-level utilities to integrate translation support into other projects.
The following mixins are available:
ViewUrlMixin- provide aget_view_urlfor the {% get_translated_url %} template tag.TranslatableSlugMixin- enrich theDetailViewto support translatable slugs.LanguageChoiceMixin- add?language=xxsupport to a view (e.g. for editing).TranslatableModelFormMixin- add support for translatable forms, e.g. for creating/updating objects.
The following views are available:
TranslatableCreateView- TheCreateViewwithTranslatableModelFormMixinsupport.TranslatableUpdateView- TheUpdateViewwithTranslatableModelFormMixinsupport.
The ViewUrlMixin class¶
-
class
parler.views.ViewUrlMixin¶ Provide a
view.get_view_urlmethod in the template.This tells the template what the exact canonical URL should be of a view. The {% get_translated_url %} template tag uses this to find the proper translated URL of the current page.
Typically, setting the
view_url_namejust works:class ArticleListView(ViewUrlMixin, ListView): view_url_name = 'article:list'
The
get_view_url()will use theview_url_nametogether withview.argsandview.kwargsconstruct the URL. When some arguments are translated (e.g. a slug), theget_view_url()can be overwritten to generate the proper URL:from parler.views import ViewUrlMixin, TranslatableUpdateView from parler.utils.context import switch_language class ArticleEditView(ViewUrlMixin, TranslatableUpdateView): view_url_name = 'article:edit' def get_view_url(self): with switch_language(self.object, get_language()): return reverse(self.view_url_name, kwargs={'slug': self.object.slug})
-
get_view_url()¶ This method is used by the
get_translated_urltemplate tag.By default, it uses the
view_url_nameto generate an URL. When the URLargsandkwargsare translatable, override this function instead to generate the proper URL.
-
view_url_name= None¶ The default view name used by
get_view_url(), which should correspond with the view name in the URLConf.
-
The TranslatableSlugMixin class¶
-
class
parler.views.TranslatableSlugMixin¶ An enhancement for the
DetailViewto deal with translated slugs. This view makes sure that:- The object is fetched in the proper translation.
- The slug field is read from the translation model, instead of the shared model.
- Fallback languages are handled.
- Objects are not accidentally displayed in their fallback slug, but redirect to the translated slug.
Example:
class ArticleDetailView(TranslatableSlugMixin, DetailView): model = Article template_name = 'article/details.html'
-
get_language()¶ Define the language of the current view, defaults to the active language.
-
get_language_choices()¶ Define the language choices for the view, defaults to the defined settings.
-
get_object(queryset=None)¶ Fetch the object using a translated slug.
-
get_translated_filters(slug)¶ Allow passing other filters for translated fields.
The LanguageChoiceMixin class¶
-
class
parler.views.LanguageChoiceMixin¶ Mixin to add language selection support to class based views, particularly create and update views. It adds support for the
?language=..parameter in the query string, and tabs in the context.-
get_current_language()¶ Return the current language for the currently displayed object fields. This reads
self.object.get_current_language()and falls back toget_language().
-
get_default_language(object=None)¶ Return the default language to use, if no language parameter is given. By default, it uses the default parler-language.
-
get_language()¶ Get the language parameter from the current request.
-
get_language_tabs()¶ Determine the language tabs to show.
-
get_object(queryset=None)¶ Assign the language for the retrieved object.
-
The TranslatableModelFormMixin class¶
-
class
parler.views.TranslatableModelFormMixin¶ Mixin to add translation support to class based views.
For example, adding translation support to django-oscar:
from oscar.apps.dashboard.catalogue import views as oscar_views from parler.views import TranslatableModelFormMixin class ProductCreateUpdateView(TranslatableModelFormMixin, oscar_views.ProductCreateUpdateView): pass
-
get_form_class()¶ Return a
TranslatableModelFormby default if no form_class is set.
-
get_form_kwargs()¶ Pass the current language to the form.
-
The TranslatableCreateView class¶
-
class
parler.views.TranslatableCreateView(**kwargs)¶ Create view that supports translated models. This is a mix of the
TranslatableModelFormMixinand Django’sCreateView.
The TranslatableUpdateView class¶
-
class
parler.views.TranslatableUpdateView(**kwargs)¶ Update view that supports translated models. This is a mix of the
TranslatableModelFormMixinand Django’sUpdateView.