Py学习  »  问与答

django中有没有一种"include view"视图的方法?

ziozio • 9 年前 • 7344 次点击  

假设视图view_A的模块example_A.html 引入了example_B.html的代码( {% include 'example_B.html' %} )

这样这引入了example_B.html的html代码, 即view_A中不存在view_B的数据(Context).

问: 是需要每次都要把example_B.html中出现过的数据(Context)重新输入一次吗? 有没有一种方法直接引入view_B和example_B.html的?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/639
 
7344 次点击  
文章 [ 7 ]  |  最新文章 9 年前
windy
Reply   •   1 楼
windy    9 年前

@ziozio 有缩进的, 代码前面给4个空格, 就是代码格式. 给整理一下:

from django.template import loader, RequestContext

def user_proc(request): 
    """a context processor that provides user information""" 
    return { 'user': request.user, }

def home(request): 
    link_list = Link.objects.order_by('-pub_date') 
    t = loader.get_template('home.html') 
    c = RequestContext(
            request, 
            {'link_list': link_list,}, 
            processors=[user_proc]
            ) 
    return HttpResponse(t.render(c))

(^-^)感谢, 学习了

ziozio
Reply   •   2 楼
ziozio    9 年前

@windy 忘记了用markdown写完全没缩进, 不过你应该看懂的

ziozio
Reply   •   3 楼
ziozio    9 年前

@windy 已经解决了, RequestContext可以实现. 具体思路是: 在views视图定义一个/多个公用的context集合(即是processors). 建议按照不同的数据集合定义不同的processor, 这样更加灵活

直接看代码:

from django.template import loader, RequestContext

def user_proc(request): """a context processor that provides user information""" return { 'user': request.user, }

def home(request): link_list = Link.objects.order_by('-pub_date') t = loader.get_template('home.html') c = RequestContext(request, {'link_list': link_list,}, processors=[user_proc]) return HttpResponse(t.render(c))

注意: djangobook 中直接return r.render(c) 在我的版本1.5中报错, 需要这样: return HttpResponse(t.render(c))

windy
Reply   •   4 楼
windy    9 年前

同楼主的疑惑,一直都是在视图中调用函数来获取公共数据的..每个视图都要放好麻烦

ziozio
Reply   •   5 楼
ziozio    9 年前

@mihello 这个思路好像可以, 我去补补这方面的知识在看看行不行

mihello
Reply   •   6 楼
mihello    9 年前

这个应该可以用RequestContext and Context Processors,写一个A & B公共的Context Processors。 应该可以这样。具体看看文档 http://www.djangobook.com/en/2.0/chapter09.html

cumt_ttr
Reply   •   7 楼
cumt_ttr    9 年前

extends标签?