Если вы хотите получить в настоящее время Зарегистрированный пользователь
и используйте его-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”