Рубрики
Без рубрики

Django usercontextmixin

Если вы хотите получить в настоящее время пользователя в настоящее время и использовать его-E.G в верхней части каждого шаблона, в классе … Tagged с Python, Django, Mixin.

Если вы хотите получить в настоящее время Зарегистрированный пользователь и используйте его-E.G в верхней части каждого шаблона, в классе, это может быть трудно достичь.

Однако есть простой способ Python/Django для этого: просто используйте Микшин Анкет На самом деле Django Структура состоит из очень широкого диапазона Микшины такие как SingleObjectMixin или TemplaterSponsemixin . Для более подробной информации: Django Class Mixins Анкет

Итак, теперь мы можем написать наш собственный Микшин Чтобы сделать работу:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from django.views.generic.base import ContextMixin


class UserContextMixin(ContextMixin):
    """Get current `User` from request and add it to context"""

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)
        user = self.request.user
        context['user'] = user

        return context

Выше мы наследуем наш Микшин от встроенный Контекстмиксин класс, который можно исследовать ниже:

class ContextMixin:
    """
    A default context mixin that passes the keyword arguments received by
    get_context_data() as the template context.
    """
    extra_context = None

    def get_context_data(self, **kwargs):
        if 'view' not in kwargs:
            kwargs['view'] = self
        if self.extra_context is not None:
            kwargs.update(self.extra_context)
        return kwargs

Тогда вы можете унаследовать это в своем Класс на основе представления Как ниже:

from .utils.views import UserContextMixin


class OrderCreateView(UserContextMixin, CreateView):
    template_name = "template.html"
    success_url = reverse_lazy("product:order")
    form_class = OrderModelForm
    extra_context = {'some_detail': 'Some Other Info'}

    …

Итак, теперь вы можете использовать свой Пользовательский контекст По другим атрибутам вашего взгляда. Также вы можете получить доступ к нему в своих шаблонах, например, ниже:

{% extends "app/base_site.html" %}
{% load staticfiles %}

{% block title %} Order {% endblock title %}

{% block content %}
…

User : {{ user }}
User Name : {{ user.name }}

…

{% endblock content %}

Профессиональный совет : Всегда наследуйте свой Микшин до Класс на основе представления классы

Все сделано!

Оригинал: “https://dev.to/serhatteker/django-usercontextmixin-5cak”