Django前端獲取后端數據之前端自定義函數


在寫網站的時候遇到了一個問題:

Django在后端向前端傳數據時,多數會使用dict字典來傳送多個數據,但前端只能遍歷,沒有一個用key取到value值的方法可以直接使用

如果作為一個list傳遞到前端,結構相同情況下,遍歷確實夠用。但是使用dict時多數會使用單個key取value放到不同的地方使用,Django提供的方法就不夠用了。

所以這篇文章介紹一下如何創建一個自定義函數供使用,此文中寫了一個用key取到value值的函數

 

1、在某個app中創建一個新的templatetags 文件,templatetags 文件與url.py、views.py同級

  下圖為名為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的名字
]

  

2、然后在此目錄下新建兩個py文件,__init__.py和一個自定義的py文件。如下圖

  

  __init__.py文件是讓Django框架知道這是一個Python package,里面不需要寫代碼,但是不能沒有這個文件。因為第一步中已經確定了app已經添加到INSTALLED_APPS中,所以這個package也被項目納入其中。

  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) #將此方法添加到模板中 

  

 3、前端使用自定義方法

  首先在模板(一般是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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM