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

相關文章
相關標籤/搜索