最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

django 自定義過濾器(filter)處理較為復雜的變量方法

 更新時間:2019年08月12日 10:31:05   作者:Justbreaking  
今天小編就為大家分享一篇django 自定義過濾器(filter)處理較為復雜的變量方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

簡述:django 在views中有數(shù)據需要通過字典(dict)的方式傳遞給template,該字典中又包含了字典,而且字典中的鍵值還是一個對象,在template中處理傳遞過來的數(shù)據的時候,字典不能通過鍵值的方式取出原有數(shù)據,對象不能通過(.)的方式直接取出數(shù)據,通過大量地查閱資料,最終通過過濾器(filter)的方式解決!

1、需要傳遞到template的數(shù)據,在 views.py 中的index函數(shù)中

latest_article_list 是一個Article對象的列表,包含文章ID、作者、發(fā)布時間、分類等各種信息

dic['tag_list'] 為一個列表(文章標簽列表)

articles_info是一個以字典為元素的列表,而且該字典中 鍵'article'對應的不是普通變量,而是一個Article對象

view.py

def index(request):
  latest_article_list = Article.objects.query_by_time()
  articles_info = []
  dic = {}
  for article in latest_article_list:
    taginfo = Article.objects.get(id=article.id)
    dic['tag_list'] = taginfo.tags.all()
    dic['article'] = article;
    articles_info.append(dic)
    dic = {}

  loginform = LoginForm()
  context = {'articles_info':articles_info, 'loginform':loginform}
  return render(request, 'index.html', context)

2、template如何引用views傳遞過來的變量值?

在index.html中,可以先遍歷列表,得到每一個字典變量;

 {% for article_info in articles_info %}

遍歷 articles_info 之后的article_info 為一個字典,通過前面的views可以知道里面包含了一個article對象和一個tag_list列表;

對于article_info這個字典變量,在模板中卻不能通過鍵值對獲取對應的值,更別說獲取Article對象中ID、作者、發(fā)布時間等屬性值了,為了解決這一問題,這里就需要過濾器才能實現(xiàn);

3、自定義過濾器

1)、在app目錄下建立templagetags文件夾,在此目錄下建立空文件 __init__.py和過濾器文件articleinfo.py;

2)、編輯 articleinfo.py,添加過濾器 get_key 和get_attr,get_key獲取字典不同鍵對應的值,get_attr獲取Article對象中不同字段對應的值;

articleinfo.py

from django import template
register = template.Library()

@register.filter
def get_key(d, key_name):
  return d.get(key_name)

@register.filter
def get_attr(d, m):
  if hasattr(d, m):
    return getattr(d, m)

4、模板中使用過濾器,獲取各種變量值;

index.html中,首先需要通過標簽加載上面定義的過濾器文件 articleinfo.py,然后就是index.html模板中調用過濾器了,具體的使用方法見下面的index.html文件;

{% load articleinfo %}

下面的index.html中變量使用的部分代碼,使用了雙重過濾器提取出了所需要的變量;

比如第4行中

{{ article_info|get_key:"article"|get_attr:"id" }}

首先通過 article_info|get_key:"article" 獲取到字典中的article對象,但此處需要的是article對象中的ID屬性,由于并不能通過{{ article_info|get_key:"article".id }} 獲取到對應的ID值,所以只好雙重過濾器來實現(xiàn)了。

index.html

{% for article_info in articles_info %}
  <div class="row">
    <article class="col-xs-12">
      <h3><a id="article_title", href="/focus/{{ article_info|get_key:" rel="external nofollow" article"|get_attr:"id" }}">{{ article_info|get_key:"article"|get_attr:"title" }}</a></h3>
      <div class="article_info">
        <span class="">{{ article_info|get_key:"article"|get_attr:"author" }}</span>
        <span class="">{{ article_info|get_key:"article"|get_attr:"create_time"|date:"Y-m-d H:i" }}</span>
      </div>
      <div class="category">
        分類:
         <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class>{{ article_info|get_key:"article"|get_attr:"category" }}</a>
      </div>
      <div class="category">
        標簽:
        {% for tag in article_info|get_key:"tag_list" %}
          <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >{{ tag }}</a>
        {% endfor %}
      </div>
      <p>{{ article_info|get_key:"article"|get_attr:"content"|truncatechars_html:80 | safe }}</p>
      <p><button class="btn btn-default" onclick="window.location.href='/focus/{{ article_info|get_key:"article"|get_attr:"id" }}' ">Read More</button></p>
      <ul class="list-inline">
        <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span class="glyphicon glyphicon-comment"></span>{{ article_info|get_key:"article"|get_attr:"comment_num" }} Comments</a></li>
        <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><span class="glyphicon glyphicon-thumbs-up"></span>{{ article_info|get_key:"article"|get_attr:"like_num" }} Likes</a></li>
      </ul>
    </article>
  </div>      
  <hr>
{% endfor %}

以上這篇django 自定義過濾器(filter)處理較為復雜的變量方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一文帶你了解Python中的枚舉(enum)

    一文帶你了解Python中的枚舉(enum)

    這篇文章一文帶你了解Python中的枚舉(enum),在Python中,枚舉和我們在對象中定義的類變量時一樣的,每一個類變量就是一個枚舉項,需要的朋友可以參考下
    2023-04-04
  • 解析Python中while true的使用

    解析Python中while true的使用

    這篇文章主要介紹了解析Python中while true的使用,while true即用來制造一個無限循環(huán),需要的朋友可以參考下
    2015-10-10
  • python程序調用遠程服務的步驟詳解

    python程序調用遠程服務的步驟詳解

    這篇文章主要介紹了python程序調用遠程服務的步驟詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-03-03
  • 基于Python爬取素材網站音頻文件

    基于Python爬取素材網站音頻文件

    這篇文章主要介紹了基于Python爬取素材網站音頻文件,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • Django錯誤:TypeError at / ''bool'' object is not callable解決

    Django錯誤:TypeError at / ''bool'' object is not callable解決

    這篇文章主要介紹了Django 錯誤:TypeError at / 'bool' object is not callable解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 詳解Python sys.argv使用方法

    詳解Python sys.argv使用方法

    在本文中我們給大家詳細講解了關于Python sys.argv使用方法以及注意事項,有此需要的讀者們跟著學習下。
    2019-05-05
  • Python使用文件操作實現(xiàn)一個XX信息管理系統(tǒng)的示例

    Python使用文件操作實現(xiàn)一個XX信息管理系統(tǒng)的示例

    這篇文章主要介紹了Python使用文件操作實現(xiàn)一個XX信息管理系統(tǒng)的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 使用Python pip怎么升級pip

    使用Python pip怎么升級pip

    這篇文章主要介紹了使用Python pip怎么升級pip,本文給大家分享方法和實現(xiàn)步驟對python pip升級pip相關知識感興趣的朋友跟隨小編一起看看吧
    2020-08-08
  • 對Python使用mfcc的兩種方式詳解

    對Python使用mfcc的兩種方式詳解

    今天小編就為大家分享一篇對Python使用mfcc的兩種方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 淺談Selenium+Webdriver 常用的元素定位方式

    淺談Selenium+Webdriver 常用的元素定位方式

    這篇文章主要介紹了淺談Selenium+Webdriver 常用的元素定位方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論

大关县| 益阳市| 阿拉善右旗| 习水县| 寿光市| 营山县| 仁布县| 合阳县| 特克斯县| 黑水县| 南澳县| 永州市| 宜丰县| 方正县| 太原市| 阿克苏市| 乌鲁木齐市| 安庆市| 濉溪县| 石嘴山市| 横山县| 乌鲁木齐县| 景东| 阿拉尔市| 泾川县| 甘泉县| 莆田市| 南和县| 博白县| 左权县| 五华县| 赞皇县| 金溪县| 思南县| 沙河市| 新安县| 息烽县| 任丘市| 潜江市| 贵定县| 历史|