第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Django用模板標(biāo)簽templatetags分頁文章html傳入?yún)?shù)后context無返回或者是參數(shù)是沒有傳入模板函數(shù)?

Django用模板標(biāo)簽templatetags分頁文章html傳入?yún)?shù)后context無返回或者是參數(shù)是沒有傳入模板函數(shù)?

慕斯王 2019-02-24 09:19:08
我按照這篇https://segmentfault.com/a/11...的方法去實(shí)現(xiàn)一個(gè)分頁功能。原本用django系統(tǒng)的painator是可以實(shí)現(xiàn)分頁的,只是把全部頁碼都輸出到html里,文章多了十分不好。于是網(wǎng)上找到這篇文章,使用的是templatetags模板標(biāo)簽去實(shí)現(xiàn)分頁,可以參考django官方文檔https://docs.djangoproject.co...。我用了里面的simple_tag(),運(yùn)行之后沒有報(bào)錯(cuò),但是文章內(nèi)容分頁導(dǎo)航什么都不顯示了。后來我嘗試了在下面第二段代碼的def paginate(context, object_list, page_count)里估計(jì)把一些代碼寫錯(cuò),運(yùn)行之后居然也沒有報(bào)錯(cuò),我就懷疑在我的html里{% paginate post_list 3 %}是不是沒有傳入?yún)?shù)失效,還是paginate方法沒有運(yùn)行???下面的context標(biāo)簽上下文{{ article_list }},{{ article.title}}以及后面的也都是無效的,html沒有顯示任何東西。折騰了幾天了,求大神解救!告訴我哪里出錯(cuò)了,可以的話貼一下代碼,感激不盡! 1.這是我的app應(yīng)用,放置templatetags目錄的地方 __init__.py models.py templatetags/ __init__.py paginate_tag.py views.py model.py 2.下面的是paginate_tag.py的內(nèi)容,實(shí)現(xiàn)分頁和context from django import template from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage register = template.Library() @register.simple_tag(takes_context=True) def paginate(context, object_list, page_count): left = 3 right = 3 paginator = Paginator(object_list, page_count) page = context['request'].GET.get('page') try: object_list = paginator.page(page) context['current_page'] = int(page) pages = get_left(context['current_page'], left, paginator.num_pages) + get_right(context['current_page'], right, paginator.num_pages) except PageNotAnInteger: object_list = paginator.page(1) context['current_page'] = 1 pages = get_right(context['current_page'], right, paginator.num_pages) except EmptyPage: object_list = paginator.page(paginator.num_pages) context['current_page'] = paginator.num_pages pages = get_left(context['current_page'], left, paginator.num_pages) context['article_list'] = object_list context['pages'] = pages context['last_page'] = paginator.num_pages context['first_page'] = 1 try: context['pages_first'] = pages[0] context['pages_last'] = pages[-1] + 1 except IndexError: context['pages_first'] = 1 context['pages_last'] = 2 return '' # 必須加這個(gè),否則首頁會(huì)顯示個(gè)None def get_left(current_page, left, num_pages): if current_page == 1: return [] elif current_page == num_pages: l = [i - 1 for i in range(current_page, current_page - left, -1) if i - 1 > 1] l.sort() return l l = [i for i in range(current_page, current_page - left, -1) if i > 1] l.sort() return l def get_right(current_page, right, num_pages): if current_page == num_pages: return [] return [i + 1 for i in range(current_page, current_page + right - 1) if i < num_pages - 1] 3.這個(gè)是實(shí)現(xiàn)分頁這部分的html代碼 templates/blog/pagination.html <div id="pagenavi" class="noselect"> {% if article_list.has_previous %} # 判斷是否還有上一頁,有的話要顯示一個(gè)上一頁按鈕 <a class="previous-page" href="?page={{ article_list.previous_page_number }}"> <span class="icon-previous"></span>上一頁 </a> {% endif %} # 頁碼號(hào)為1永遠(yuǎn)顯示 {% if first_page == current_page %} # 當(dāng)前頁就是第一頁 <span class="first-page current">1</span> {% else %} # 否則的話,第一頁是可以點(diǎn)擊的,點(diǎn)擊后通過?page=1的形式把頁碼號(hào)傳遞給視圖函數(shù) <a href="?page=1" class="first-page">1</a> {% endif %} {% if pages_first > 2 %} # 2以前的頁碼號(hào)要被顯示成省略號(hào)了 <span>...</span> {% endif %} {% for page in pages %} # 通過for循環(huán)把pages中的值顯示出來 {% if page == current_page %} # 是否當(dāng)前頁,按鈕會(huì)顯示不同的樣式 <span class="current">{{ page }}</span> {% else %} <a href="?page={{ page }}">{{ page }}</a> {% endif %} {% endfor %} # pages最后一個(gè)值+1的值小于最大頁碼號(hào),說明有頁碼號(hào)需要被省略號(hào)替換 {% if pages_last < last_page %} <span>...</span> {% endif %} # 永遠(yuǎn)顯示最后一頁的頁碼號(hào),如果只有一頁則前面已經(jīng)顯示了1就不用再顯示了 {% if last_page != 1 %} {% if last_page == current_page %} <span class="current">{{ last_page }}</span> {% else %} <a href="?page={{ last_page }}">{{ last_page }}</a> {% endif %} {% endif %} # 還有下一頁,則顯示一個(gè)下一頁按鈕 {% if article_list.has_next %} <a class="next-page" href="?page={{ article_list.next_page_number }}"> 下一頁<span class="icon-next"></span> </a> {% endif %} </div> 這里是我的視圖函數(shù)views.py from django.shortcuts import render from django.http import HttpResponse from article.models import Article def home(request) post_list = Article.objects.all() return render(request, 'home.html', {'post_list': post_list}) ... 最后是我要實(shí)現(xiàn)分頁的頁面home.html {% load paginate_tags %} {% paginate post_list 3 %} # context是默認(rèn)傳入的,我把post_list和文章數(shù)傳入,我要實(shí)現(xiàn)每頁3篇文章,所以傳入3 {% for article in article_list %} <section class="post"> <h1>{{ article.title }}</h1> <p>{{ article.content }} </p> ... ... ... </section> {% include 'pagination.html' %} ....
查看完整描述

2 回答

?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

感謝樓上兩位熱心的回答,特別是@tcztzy ,寫了個(gè)項(xiàng)目發(fā)郵件給我了,非常感謝。真是打擾了,@追夢(mèng)人物 ,不是代碼的問題,是我犯了個(gè)低級(jí)錯(cuò)誤,原因是我用home.html是{% extends base.html %},然后home.html的html內(nèi)容用{% block content %}包起來了,關(guān)鍵是我把{% load paginate %}放在home.html的第二行,處于我的{% block content %}外面了,導(dǎo)致html先加載到瀏覽器后,才處理分頁,所以頁面上啥也沒有。所以我把{% load paginate %}放到了{% block content %}里面就成功顯示了。

查看完整回答
反對(duì) 回復(fù) 2019-03-04
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

變量名不統(tǒng)一。

{% include %}標(biāo)簽繼承的是當(dāng)前home.html的變量,而home.html的變量是views.home傳遞的{'post_list': post_list},也就是變量名為'post_list'指向?qū)ο?code>post_list,而你在模板里使用的都是'article_list',這個(gè)變量名沒有指向任何對(duì)象。

查看完整回答
反對(duì) 回復(fù) 2019-03-04
  • 2 回答
  • 0 關(guān)注
  • 995 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)