您的位置:首页 > Web前端 > HTML

Django 输出非html内容

2011-09-08 18:12 309 查看
Django 输出非html内容

生成 CSV 文件

CSV 是一种简单的数据格式,通常为电子表格软件所使用。 它主要是由一系列的表格行组成,每行中单元格之间使用逗号(CSV 是 逗号分隔数值(comma-separated values) 的缩写)隔开。

import csv

from django.http import HttpResponse

# Number of unruly passengers each year 1995 - 2005. In a real application

# this would likely come from a database or some other back-end data store.

UNRULY_PASSENGERS = [146,184,235,200,226,251,299,273,281,304,203]

def unruly_passengers_csv(request):

# Create the HttpResponse object with the appropriate CSV header.

response = HttpResponse(mimetype='text/csv')

response['Content-Disposition'] = 'attachment; filename=unruly.csv'

# Create the CSV writer using the HttpResponse as the "file."

writer = csv.writer(response)

writer.writerow(['Year', 'Unruly Airline Passengers'])

for (year, num) in zip(range(1995, 2006), UNRULY_PASSENGERS):

writer.writerow([year, num])

return response

生成 PDF 文件

需要安装 ReportLab 库

from reportlab.pdfgen import canvas

from django.http import HttpResponse

def hello_pdf(request):

# Create the HttpResponse object with the appropriate PDF headers.

response = HttpResponse(mimetype='application/pdf')

response['Content-Disposition'] = 'attachment; filename=hello.pdf'

# Create the PDF object, using the response object as its "file."

p = canvas.Canvas(response)

# Draw things on the PDF. Here's where the PDF generation happens.

# See the ReportLab documentation for the full list of functionality.

p.drawString(100, 100, "Hello world.")

# Close the PDF object cleanly, and we're done.

p.showPage()

p.save()

return response

cStringIO 库存放临时生成的 PDF 文件

from cStringIO import StringIO

from reportlab.pdfgen import canvas

from django.http import HttpResponse

def hello_pdf(request):

# Create the HttpResponse object with the appropriate PDF headers.

response = HttpResponse(mimetype='application/pdf')

response['Content-Disposition'] = 'attachment; filename=hello.pdf'

temp = StringIO()

# Create the PDF object, using the StringIO object as its "file."

p = canvas.Canvas(temp)

# Draw things on the PDF. Here's where the PDF generation happens.

# See the ReportLab documentation for the full list of functionality.

p.drawString(100, 100, "Hello world.")

# Close the PDF object cleanly.

p.showPage()

p.save()

# Get the value of the StringIO buffer and write it to the response.

response.write(temp.getvalue())

return response

zip: 标准库zipfile 模块

tar:标准库 tarfile 模块

图表库:matplotlib pygraphviz

RSS内容聚合器应用框架

为了在您的Django站点中激活syndication feeds, 添加如下的 URLconf:
from django.conf.urls.defaults import *
from mysite.feeds import LatestEntries, LatestEntriesByCategory

feeds = {
'latest': LatestEntries,
'categories': LatestEntriesByCategory,
}

urlpatterns = patterns('',
# ...
(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed',
{'feed_dict': feeds}),
# ...
)


#简单的Feed
from django.contrib.syndication.feeds import Feed
from mysite.blog.models import Entry

class LatestEntries(Feed):
title = "My Blog"
link = "/archive/"
description = "The latest news about stuff."

def items(self):
return Entry.objects.order_by('-pub_date')[:5]


同时发布Atom and RSS

from django.contrib.syndication.feeds import Feed

from django.utils.feedgenerator import Atom1Feed

from mysite.blog.models import Entry

class RssLatestEntries(Feed):

title = "My Blog"

link = "/archive/"

description = "The latest news about stuff."

def items(self):

return Entry.objects.order_by('-pub_date')[:5]

class AtomLatestEntries(RssLatestEntries):

feed_type = Atom1Feed

#URLconf:

from django.conf.urls.defaults import *

from myproject.feeds import RssLatestEntries, AtomLatestEntries

feeds = {

'rss': RssLatestEntries,

'atom': AtomLatestEntries,

}

urlpatterns = patterns('',

# ...

(r'^feeds/(?P<url>.*)/$', 'django.contrib.syndication.views.feed',

{'feed_dict': feeds}),

# ...

)

Sitemap 框架

安装

要安装 sitemap 应用程序, 按下面的步骤进行:

1将 'django.contrib.sitemaps' 添加到您的 INSTALLED_APPS 设置中.

2确保 'django.template.loaders.app_directories.load_template_source' 在您的 TEMPLATE_LOADERS 设置中。 默认情况下它在那里, 所以, 如果你已经改变了那个设置的话, 只需要改回来即可。

3确定您已经安装了 sites 框架 (参见第djanbook 14章).

URLconf 中添加这一行:

(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})

Sitemap 类:

from django.contrib.sitemaps import Sitemap

from mysite.blog.models import Entry

class BlogSitemap(Sitemap):

changefreq = "never"

priority = 0.5

def items(self):

return Entry.objects.filter(is_draft=False)

def lastmod(self, obj):

return obj.pub_date

通知Google:

当你的sitemap变化的时候,你会想通知Google,以便让它知道对你的站点进行重新索引。 框架就提供了这样的一个函数:

django.contrib.sitemaps.ping_google()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: