Django前端获取后端数据以前端自定义函数

在写网站的时候遇到了一个问题:html

Django在后端向前端传数据时,多数会使用dict字典来传送多个数据,但前端只能遍历,没有一个用key取到value值的方法能够直接使用前端

若是做为一个list传递到前端,结构相同状况下,遍历确实够用。可是使用dict时多数会使用单个key取value放到不一样的地方使用,Django提供的方法就不够用了。java

因此这篇文章介绍一下如何建立一个自定义函数供使用,此文中写了一个用key取到value值的函数python

 

一、在某个app中建立一个新的templatetags 文件,templatetags 文件与url.py、views.py同级django

  下图为名为west的app目录结构后端

要保证这个app已经写到了整个Django项目的INSTALLED_APPS中,在Django项目根路径下的settings.py文件中文件中查看此app是否已经加入整个项目,若是没有则添加上,代码以下
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'west',   #此处就是这个app的名字
]

  

二、而后在此目录下新建两个py文件,__init__.py和一个自定义的py文件。以下图session

  

  __init__.py文件是让Django框架知道这是一个Python package,里面不须要写代码,可是不能没有这个文件。由于第一步中已经肯定了app已经添加到INSTALLED_APPS中,因此这个package也被项目归入其中。app

  dict_fun.py则是本身写的方法文件框架

  dict_fun.py文件以下,其中须要注意的地方已经注释函数

from django import template

register = template.Library() #以上两行代码是获取到Django模板全部tags和filter的library,以便咱们写入一个新的方法

def dict_get(adict, key):   #自定义方法,adict是咱们使用这个方法的调用者,key是dict_get方法的参数,若是不太懂,接着往下看
    """get the value using key from a dict"""
    return dict(adict).get(key)
register.filter('dict_get', dict_get) #将此方法添加到模板中 

  

 三、前端使用自定义方法

  首先在模板(通常是html)中添加一个标签,使刚才写的方法引入,注意此处的dict_fun对应的是在第一步中建立的dict_fun.py

{% load dict_fun %}

  {{ a }}在django框架中即是使用后端传递过来数据的写法。

  使用本身写的函数以下,可能一开始看起来并无那么易懂。

{{ adict|dict_get:"pic" }}

  dict是后端传过来的数据,dict_get是在dict_fun.py中定义的函数,“pic”是dict_get方法的参数。一句话归纳就是:adict使用函数dict_get(),参数为“pic”

  还记得dict_get()方法在定义的时候有两个参数吗?其实第一个参数是调用者,被写在了参数列表中

 

 

参考连接:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-custom-filters

相关文章
相关标签/搜索