• django 上下文处理器


    上下文处理器是可以返回一些数据,在全局模板中使用。

    自定义上下文处理器:

    我们每个视图函数都需要返回自己的数据,或者有其他的判断格式。这样就可以自己定义上下文处理器,不需要再每一个试图函数中都写同样的代码。精简代码

    首先我们定义一个函数作为我们上下文处理器的名字,我们可以写一个判断是否登录的函数。

    from .models import User
    
    def front_user(request):
        user_id = request.session.get('user_id')
        context = {}
        if user_id:
            try:
                user = User.objects.get(pk=user_id)
                context['front_user'] = user
            except:
                pass
        return context

    定义好之后可以直接在settings.py的TEMPLATES下的context_processors中就可以了。

    'front.context_processors.front_user'

    注:自定义上下文处理器最后一定要返回一个字典,即使是一个空的字典。

    django中内置上下文处理器的原理:

    上下文处理器是属于模板的 所以在TEMPLATES当中 的context_processors。

    django中自带的有4个内置上下文处理器。

      1. debug:(django.template.context_processors.debug)增加一个debug和sql_queries变量。在模板中可以通过他来查看到一些数据库。

      2.request: (django.template.context_processors.request)增加一个request变量。这个request变量也就是在视图函数的第一个参数 

      • 使用时直接在网页上request.path  就会显示视图函数的第一个参数

      3.auth:(django.contrib.auth.context_processors.auth):django有内置的用户系统,这个上下文会增加一个user对象。

      4.messages:(django.contrib.messages.context_processages.messages):增加一个messages变量。

    #forms.pyL里定义
    def
    get_error(self): new_errors = [] errors = self.errors.get_json_data() for messages in errors.values(): for message_dicts in messages: for key,message in message_dicts.items(): if key == 'messages': new_errors.append(message) return new_errors
    #views.py里
    from
    django.contrib import messages #messages.add_message(request,message.INFO,'用户名或着密码错误‘) message.info('用户名或密码错误')

    errors = form.get_error()
    for error in errors:
    messages.info(request,error)
    return redirect(reverse('sign'))

       5.media:【django.template.context_processors.media】:在模板中可以读取MEDIA_URL.比如想要在模板中使用上传的文件,那么这时候只需要在settings.py中设置MEDIA_URL来拼接url   

      • 在urls.py文件的urlpatterns后面添加   +static(settings.MEDIA_URL,document_roo = settings.MEDIA_ROOT)  
      • 然后media文件下的东西  可以直接使用media路径。
      • 要在settings.py中添加django.template.context_processors.media

      6.static (django.template.context_processors.static)  在模板中可以使用static_url

      7.csrf:(django.remplate.context_processors.csrf)  在模板中可以使用csrf_token变量来生成一个csrf token

      • 在表单中直接使用{% csrf_token %}
      • 也可以用input   {<input type='hidden' name='csrfmiddlewaretoken' value='{{csrf_token}}'> }
  • 相关阅读:
    一步步打造QQ群发消息群发器
    正确理解IEnumerable和IQueryable两接口的区别
    分享破解公众号裂变涨粉工具、吸粉方案。
    快40岁了,我还要不要继续写代码呢?
    精准营销、批量提取QQ群成员号码
    分享一个公众号h5裂变吸粉源码工具
    C#(.NET) HMAC SHA256实现
    mybatis的<if>标签,<foreach>标签,<collection>标签,<association>标签以及useGeneratedKeys用法
    springBoot解决跨域问题
    springBoot实现文件上传与下载
  • 原文地址:https://www.cnblogs.com/nihao2/p/12331479.html
Copyright © 2020-2023  润新知