using two templates from one view

django, django-views

Solution

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

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.

Problem

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? Here is the sample code: ``` # 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 ```

Original source