在一个视图中使用两个模板

jcu*_*uot 3 django django-views

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

以下是示例代码:

# 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
Run Code Online (Sandbox Code Playgroud)

Roh*_*han 5

您可以在网址中使用参数并实现类似的视图

def myview(request) :

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

    # do processing
    if type == 'html':
        # return html
    else if type == 'csv':
        # return csv
Run Code Online (Sandbox Code Playgroud)

如果您访问类似于http://yourserver/myview?type=csv它的URL 将呈现视图的csv部分.http://yourserver/myview访问URL时,它将返回视图的html部分.