[Python #12] [Django #5] Template tags, filters 使用记
pixabay
把文章列表投到网页时遇到了一个问题,get_blog()函数返回的参数里没有缩略图参数导致列表不显示缩略图。
再研究下函数把👇
[{'blog': 'steem.scot',
'comment': {'active_votes': [],
'author': 'steem.scot',
'author_reputation': 0,
'beneficiaries': [],
'body': '|table|테이블|表格|\n'
'|---|----|---|\n'
'|table cell|테이블 셀|表格内容|\n'
'pixabay\n'
'https://cdn.pixabay.com/photo/2015/06/02/12/59/narrative-794978_1280.jpg\n'
'\n'
'CONTENT, content 내용입니다. 本文测试。\n'
'\n'
'\n'
'![stained-glass-1181864_1280.jpg](https://cdn.steemitimages.com/DQmSvFnsanUa6uxLS3qzTkiTBj7HK5oYs3hGhZySGCW9iUS/stained-glass-1181864_1280.jpg)\n'
'\n'
'\n'
'> 인용문',
'body_length': 319,
'cashout_time': '2020-08-30T05:46:54',
'category': 'qa',
'children': 0,
'created': '2020-08-23T05:46:54',
'curator_payout_value': '0.000 SBD',
'depth': 0,
'json_metadata': '{"tags":["qa","test1","korea","china"],"image":["https:\\/\\/cdn.pixabay.com\\/photo\\/2015\\/06\\/02\\/12\\/59\\/narrative-794978_1280.jpg","https:\\/\\/cdn.steemitimages.com\\/DQmSvFnsanUa6uxLS3qzTkiTBj7HK5oYs3hGhZySGCW9iUS\\/stained-glass-1181864_1280.jpg"],"app":"steemit\\/0.2","format":"markdown"}',
'last_payout': '1969-12-31T23:59:59',
'last_update': '2020-08-23T05:46:54',
'max_accepted_payout': '1000000.000 SBD',
'net_rshares': 0,
'parent_author': '',
'parent_permlink': 'qa',
'pending_payout_value': '0.000 SBD',
'percent_steem_dollars': 10000,
'permlink': 'test-1',
'post_id': 87205021,
'promoted': '0.000 SBD',
'replies': [],
'root_title': '[Test #1] 测试 한글',
'title': '[Test #1] 测试 한글',
'total_payout_value': '0.000 SBD',
'url': '/qa/@steem.scot/test-1'},
'entry_id': 0,
'reblogged_on': '1970-01-01T00:00:00'}]
有两个方法可以解决缩略图问题。一个是通过body
值获取图片URL,再一个是通过'json_metadata'值获取image
值。第一个比较麻烦,应该用正规表达式来处理,但我不是开发者啊,不太懂这玩意。第二个方法应该轻松许多,因为'json_metadata'值为 json 格式,很容易抽取内部 image
值。但看'json_metadata'值虽然是json但类型是String,我应该先把这String转换成dict。
那,写在哪里好呢?与get_blog()一起写在view.py?还是写在html文件?
第一个觉得蛮复杂,获取数据后写一个循环抽出image值并且另存到别的地方,最后再次获取。很麻烦。最好少用循环吧,毕竟在 html 文件还会有一个循环。利用这个循环抽取image觉得胜于第一个方法。我猜django应该会有方法,于是询问谷歌,果真~~~
Template filters 可以解决这个问题。
若想用Template filters,必须在app目录下创建名为 templatetags 文件夹,并且在这文件夹下新建一个文件为 init.py。还需要创建一个管理自定义函数的文件,我新建的是 str_to_dict 。 👇
from django import template
import json
register = template.Library()
@register.filter
def str_to_dict(string):
return json.loads(string)
之后在html文件,用 {% load post_extras %}
来倒入模板,并且在适当的为止调用 str_to_dict 函数即可。
语法很陌生,{% with post.comment.json_metadata|str_to_dict as extras %}
。|左侧为参数, 右侧是调用 str_to_dict ,并给变量 extras负值。其后往 img 标签的 src 属性负值 image list的第一个值。src="{{ extras.image.0 }}"
运行后大部分图片正常,但用appics写的文章不显示图片,原来appics上传的数据里没有json_metadata值,无所谓,反正appics都不用了。👇
.
.
.
.
[Cookie 😅]
Python 3.7.4
Django 2.2.4
steem-python 1.0.1
goorm IDE 1.3
参考文章:
https://wayhome25.github.io/django/2017/06/22/custom-template-filter/
[US$18.50](▼39%)[Xiaomi]🚨2020 최신 항바이러스 필터 입고!!🚨 샤오미 공기청정기 필터 / 미에어 필터 / 고효율 정화 / 활성탄 필터 / 포름알데히드 제거 / 고밀도 헤파필터 / 무료배송
WWW.QOO10.COM@june0620 transfered 1.0 KRWP to @krwp.burn. voting percent : 0.74%, voting power : 78.04%, steem power : 1891772.47, STU KRW : 1200.
@june0620 staking status : 60 KRWP
@june0620 limit for KRWP voting service : 0.12 KRWP (rate : 0.002)
What you sent : 1.0 KRWP
Refund balance : 0.88 KRWP [46293342 - a875811fd35a9d7fa924f37765b2e923faa5db56]