标签:templates filter plugins python django
假设我有一段很长的段落.
我只希望显示前15个字.之后,该人单击“更多”以查看其余内容.
解决方法:
只是将其搅动一下,似乎可以完成您想要的操作,并且不依赖任何外部JS库.
免责声明:我没有在IE中尝试过,但是chrome和firefox可以正常工作.
from django import template
from django.utils.html import escape
from django.utils.safestring import mark_safe
register = template.Library()
import re
readmore_showscript = ''.join([
"this.parentNode.style.display='none';",
"this.parentNode.parentNode.getElementsByClassName('more')[0].style.display='inline';",
"return false;",
]);
@register.filter
def readmore(txt, showwords=15):
global readmore_showscript
words = re.split(r' ', escape(txt))
if len(words) <= showwords:
return txt
# wrap the more part
words.insert(showwords, '<span class="more" style="display:none;">')
words.append('</span>')
# insert the readmore part
words.insert(showwords, '<span class="readmore">... <a href="#" onclick="')
words.insert(showwords+1, readmore_showscript)
words.insert(showwords+2, '">read more</a>')
words.insert(showwords+3, '</span>')
# Wrap with <p>
words.insert(0, '<p>')
words.append('</p>')
return mark_safe(' '.join(words))
readmore.is_safe = True
要使用它,只需在您的应用程序中创建一个templatetags文件夹,在其中创建__init__.py文件,然后将此代码放入readmore.py.
然后在您要使用它的任何模板的顶部,只需添加:{%load readmore%}
要使用过滤器本身:
{{some_long_text_var | readmore:15}}
:15告诉您在阅读更多链接之前要显示多少个单词.
如果您想花哨的时间来完成全部内容的Ajax加载,那将有很大的不同,并且需要更多的基础架构.
标签:templates,filter,plugins,python,django 来源: https://codeday.me/bug/20191208/2094553.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。