从一个视图使用两个模板 [英] using two templates from one view

查看:97
本文介绍了从一个视图使用两个模板的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过两种方式从视图中呈现内容:html和csv下载。我能够做到的唯一方法是使用2个不同的视图,一个用于html演示,一个用于csv。这重复了我的代码,我正在寻找一个更优雅的解决方案。
任何建议?

I am trying to present content from a view in two ways: html and csv download. The only way I was able to do it was to use 2 different views, one for html presentation and one for csv. This duplicates my code and I am looking for a more elegant solution. Any suggestions?

以下是示例代码:

# views.py

[...]

def member_list(request):
    member_list = Member.objects.all()

    return render_to_response("member_list.html",
                          {'member_list':member_list)


def member_csv_list(request):
    member_list = Member.objects.all()

    csv_list = HttpResponse(content_type='text/csv')
    csv_list['Content-Disposition'] = 'attachment; filename="member_list.csv"'
    writer = csv.writer(csv_list)
    writer.writerow(['Name', 'Member Type', 'Rooms'])
    for member in member_list:
        fields = [member.name, member.member_type, member.room]
        writer.writerow(fields)

    return member_list


推荐答案

您可以在url中使用参数,并实现一个视图,如

You can use a parameter in your url and implement a view like

def myview(request) :

    type = request.GET.get('type', 'html')

    # do processing
    if type == 'html':
        # return html
    else if type == 'csv':
        # return csv

如果您访问像 http:// yourserver / myview?type = csv 它将渲染视图的csv部分。当访问url http:// yourserver / myview 时,将返回视图的html部分。

If you access a url like http://yourserver/myview?type=csv it will render the csv part of the view. When the url http://yourserver/myview is accessed it will return the html part of the view.

这篇关于从一个视图使用两个模板的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆