亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

在Django中使用Sitemap的方法講解

2020-01-04 18:00:02
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了在Django中使用Sitemap的方法講解,Django是最具人氣的Python web開發框架,需要的朋友可以參考下
 

sitemap 是你服務器上的一個XML文件,它告訴搜索引擎你的頁面的更新頻率和某些頁面相對于其它頁面的重要性。 這個信息會幫助搜索引擎索引你的網站。

例如,這是 Django 網站(http://www.djangoproject.com/sitemap.xml)sitemap的一部分:
 

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  3.  <url> 
  4.   <loc>http://www.djangoproject.com/documentation/</loc> 
  5.   <changefreq>weekly</changefreq> 
  6.   <priority>0.5</priority> 
  7.  </url> 
  8.  <url> 
  9.   <loc>http://www.djangoproject.com/documentation/0_90/</loc> 
  10.   <changefreq>never</changefreq> 
  11.   <priority>0.1</priority> 
  12.  </url> 
  13.  ... 
  14. </urlset> 
?

需要了解更多有關 sitemaps 的信息, 請參見 http://www.sitemaps.org/.

Django sitemap 框架允許你用 Python 代碼來表述這些信息,從而自動創建這個XML文件。 要創建一個站點地圖,你只需要寫一個`` Sitemap`` 類,并且在URLconf中指向它。
安裝

要安裝 sitemap 應用程序, 按下面的步驟進行:

  •     將 'django.contrib.sitemaps' 添加到您的 INSTALLED_APPS 設置中.
  •     確保 'django.template.loaders.app_directories.load_template_source' 在您的 TEMPLATE_LOADERS 設置中。 默認情況下它在那里, 所以, 如果你已經改變了那個設置的話, 只需要改回來即可。
  •     確定您已經安裝了 sites 框架.

Note

sitemap 應用程序沒有安裝任何數據庫表. 它需要加入到 INSTALLED_APPS 中的唯一原因是: 這樣 load_template_source 模板加載器可以找到默認的模板. The only reason it needs to go into INSTALLED_APPS is so the load_template_source template loader can find the default templates.
Initialization

要在您的Django站點中激活sitemap生成, 請在您的 URLconf 中添加這一行:

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

This line tells Django to build a sitemap when a client accesses /sitemap.xml . Note that the dot character in sitemap.xml is escaped with a backslash, because dots have a special meaning in regular expressions.

sitemap文件的名字無關緊要,但是它在服務器上的位置卻很重要。 搜索引擎只索引你的sitemap中當前URL級別及其以下級別的鏈接。 用一個實例來說,如果 sitemap.xml 位于你的根目錄,那么它將引用任何的URL。 然而,如果你的sitemap位于 /content/sitemap.xml ,那么它只引用以 /content/ 打頭的URL。

sitemap視圖需要一個額外的必須的參數: {'sitemaps': sitemaps} . sitemaps should be a dictionary that maps a short section label (e.g., blog or news ) to its Sitemap class (e.g., BlogSitemap or NewsSitemap ). It may also map to an instance of a Sitemap class (e.g., BlogSitemap(some_var) ).
Sitemap 類

Sitemap 類展示了一個進入地圖站點簡單的Python類片斷.例如,一個 Sitemap 類能展現所有日志入口,而另外一個能夠調度所有的日歷事件。 For example, one Sitemap class could represent all the entries of your weblog, while another could represent all of the events in your events calendar.

在最簡單的例子中,所有部分可以全部包含在一個 sitemap.xml 中,也可以使用框架來產生一個站點地圖,為每一個獨立的部分產生一個單獨的站點文件。

Sitemap 類必須是 django.contrib.sitemaps.Sitemap 的子類. 他們可以存在于您的代碼樹的任何地方。

例如假設你有一個blog系統,有一個 Entry 的model,并且你希望你的站點地圖包含所有連到你的blog入口的超鏈接。 你的 Sitemap 類很可能是這樣的:
 

  1. from django.contrib.sitemaps import Sitemap 
  2. from mysite.blog.models import Entry 
  3.  
  4. class BlogSitemap(Sitemap): 
  5.   changefreq = "never" 
  6.   priority = 0.5 
  7.  
  8.   def items(self): 
  9.     return Entry.objects.filter(is_draft=False) 
  10.  
  11.   def lastmod(self, obj): 
  12.     return obj.pub_date 
?

聲明一個 Sitemap 和聲明一個 Feed 看起來很類似;這都是預先設計好的。

如同 Feed 類一樣, Sitemap 成員也既可以是方法,也可以是屬性。

一個 Sitemap 類可以定義如下 方法/屬性:

    items (必需 ):提供對象列表。 框架并不關心對象的 類型 ;唯一關心的是這些對象會傳遞給 location() , lastmod() , changefreq() ,和 priority() 方法。

    location (可選): 給定對象的絕對URL。 絕對URL不包含協議名稱和域名。 下面是一些例子:

  •         好的: '/foo/bar/' '/foo/bar/'
  •         差的: 'example.com/foo/bar/' 'example.com/foo/bar/'

    如果沒有提供 location , 框架將會在每個 items() 返回的對象上調用 get_absolute_url() 方法.

    lastmod (可選): 對象的最后修改日期, 作為一個Python datetime 對象. The object's last modification date, as a Python datetime object.

    changefreq (可選): 對象變更的頻率。 可選的值如下(詳見Sitemaps文檔):

  •         'always'
  •         'hourly'
  •         'daily'
  •         'weekly'
  •         'monthly'
  •         'yearly'
  •         'never'
  •     priority (可選): 取值范圍在 0.0 and 1.0 之間,用來表明優先級。

快捷方式

sitemap框架提供了一些常用的類。 在下一部分中會看到。
FlatPageSitemap

django.contrib.sitemaps.FlatPageSitemap 類涉及到站點中所有的flat page,并在sitemap中建立一個入口。 但僅僅只包含 location 屬性,不支持 lastmod , changefreq ,或者 priority 。

GenericSitemap

GenericSitemap 與所有的通用視圖一同工作(詳見第9章)。

你可以如下使用它,創建一個實例,并通過 info_dict 傳遞給通用視圖。 唯一的要求是字典包含 queryset 這一項。 也可以用 date_field 來指明從 queryset 中取回的對象的日期域。 這會被用作站點地圖中的 lastmod 屬性。

下面是一個使用 FlatPageSitemap and GenericSiteMap (包括前面所假定的 Entry 對象)的URLconf:
 

  1. from django.conf.urls.defaults import * 
  2. from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap 
  3. from mysite.blog.models import Entry 
  4.  
  5. info_dict = { 
  6.   'queryset': Entry.objects.all(), 
  7.   'date_field''pub_date'
  8.  
  9. sitemaps = { 
  10.   'flatpages': FlatPageSitemap, 
  11.   'blog': GenericSitemap(info_dict, priority=0.6), 
  12.  
  13. urlpatterns = patterns(''
  14.   # some generic view using info_dict 
  15.   # ... 
  16.  
  17.   # the sitemap 
  18.   (r'^sitemap/.xml$'
  19.    'django.contrib.sitemaps.views.sitemap'
  20.    {'sitemaps': sitemaps}) 
?

創建一個Sitemap索引

sitemap框架同樣可以根據 sitemaps 字典中定義的單獨的sitemap文件來建立索引。 用法區別如下:

    您在您的URLconf 中使用了兩個視圖: django.contrib.sitemaps.views.index 和 django.contrib.sitemaps.views.sitemap . `` django.contrib.sitemaps.views.index`` 和`` django.contrib.sitemaps.views.sitemap``

    django.contrib.sitemaps.views.sitemap 視圖需要帶一個 section 關鍵字參數.

這里是前面的例子的相關的 URLconf 行看起來的樣子:
 

  1. (r'^sitemap.xml$'
  2.  'django.contrib.sitemaps.views.index'
  3.  {'sitemaps': sitemaps}), 
  4.  
  5. (r'^sitemap-(?P<section>.+).xml$'
  6.  'django.contrib.sitemaps.views.sitemap'
  7.  {'sitemaps': sitemaps}) 
?

這將自動生成一個 sitemap.xml 文件, 它同時引用 sitemap-flatpages.xml 和 sitemap-blog.xml . Sitemap 類和 sitemaps 目錄根本沒有更改.
通知Google

當你的sitemap變化的時候,你會想通知Google,以便讓它知道對你的站點進行重新索引。 框架就提供了這樣的一個函數: django.contrib.sitemaps.ping_google() 。

ping_google() 有一個可選的參數 sitemap_url ,它應該是你的站點地圖的URL絕對地址(例如:

如果不能夠確定你的sitemap URL, ping_google() 會引發 django.contrib.sitemaps.SitemapNotFound 異常。

我們可以通過模型中的 save() 方法來調用 ping_google() :
 

  1. from django.contrib.sitemaps import ping_google 
  2.  
  3. class Entry(models.Model): 
  4.   # ... 
  5.   def save(self, *args, **kwargs): 
  6.     super(Entry, self).save(*args, **kwargs) 
  7.     try
  8.       ping_google() 
  9.     except Exception: 
  10.       # Bare 'except' because we could get a variety 
  11.       # of HTTP-related exceptions. 
  12.       pass 
?

一個更有效的解決方案是用 cron 腳本或任務調度表來調用 ping_google() ,該方法使用Http直接請求Google服務器,從而減少每次調用 save() 時占用的網絡帶寬。 The function makes an HTTP request to Google's servers, so you may not want to introduce that network overhead each time you call save() .

Finally, if 'django.contrib.sitemaps' is in your INSTALLED_APPS , then your manage.py will include a new command, ping_google . This is useful for command-line access to pinging. For example:
 

  1. python manage.py ping_google /sitemap.xml 
?

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美一区二区三区| 欧美尤物巨大精品爽| 欧美日韩一区二区精品| 亚洲国产日韩欧美在线动漫| 日本精品性网站在线观看| 尤物九九久久国产精品的特点| 色噜噜狠狠色综合网图区| 欧美激情视频一区二区| 国产噜噜噜噜久久久久久久久| 91av福利视频| 亚洲综合一区二区不卡| 日韩最新免费不卡| 日韩在线视频一区| 国产日本欧美一区二区三区在线| 欧美性xxxx极品高清hd直播| 欧美色视频日本高清在线观看| 亚洲国模精品私拍| 欧美特黄级在线| 欧美www在线| 亚洲天堂第二页| 成人av在线亚洲| 亚洲一区二区久久| 亚洲国产小视频| 日韩在线观看成人| 韩日欧美一区二区| 92裸体在线视频网站| 欧美乱大交xxxxx另类电影| 国产精品视频成人| 久久九九全国免费精品观看| 亚洲精品综合精品自拍| www.亚洲一二| 免费不卡欧美自拍视频| 国产亚洲在线播放| 在线看国产精品| 秋霞午夜一区二区| 欧美亚洲国产视频小说| 欧美日韩在线视频观看| 热久久美女精品天天吊色| 亚洲成年人影院在线| 国产一区红桃视频| 亚洲美女在线视频| 国语自产精品视频在免费| 一区二区三区精品99久久| 中文字幕一区二区三区电影| 国产精品久久网| 欧美国产极速在线| 国产精品劲爆视频| 亚洲成在人线av| 奇门遁甲1982国语版免费观看高清| 九九视频这里只有精品| 精品偷拍一区二区三区在线看| 精品精品国产国产自在线| 欧美大肥婆大肥bbbbb| 国产亚洲欧洲高清| 久久视频免费观看| 亚洲影院高清在线| 日韩视频精品在线| 日韩高清a**址| 国产精品91视频| 亚洲第五色综合网| 亚州av一区二区| 久久最新资源网| 在线观看国产精品日韩av| 91久久久久久久久| 操人视频在线观看欧美| 国产成人高清激情视频在线观看| 亚洲一区二区三区四区视频| 91麻豆桃色免费看| 国产精品免费观看在线| 欧美国产视频一区二区| 精品国内自产拍在线观看| 国产美女被下药99| 欧美精品videofree1080p| 国产日韩欧美视频在线| 国内精品久久久久影院 日本资源| 久久久国产精品视频| 成人在线视频福利| 亚洲国产精品va在线观看黑人| 日韩网站免费观看| 中文字幕亚洲图片| 国产在线视频欧美| 久久99国产综合精品女同| 亚洲自拍偷拍福利| 91免费国产视频| 4444欧美成人kkkk| 国产精品亚洲综合天堂夜夜| 日韩免费av片在线观看| 国产精品久久久久高潮| 欧美寡妇偷汉性猛交| 456国产精品| 国产福利成人在线| 日韩精品有码在线观看| 按摩亚洲人久久| 91sao在线观看国产| 亚洲国产精品中文| 98精品在线视频| 亚洲欧美999| 国产精品三级网站| 456亚洲影院| 日韩极品精品视频免费观看| 亚洲精品久久久一区二区三区| 亚洲激情中文字幕| 亚洲视频第一页| 2019中文在线观看| 亚洲人成77777在线观看网| 国产综合在线看| 日本91av在线播放| 日韩视频在线观看免费| 日韩一级黄色av| 狠狠综合久久av一区二区小说| 91影院在线免费观看视频| 欧美多人乱p欧美4p久久| 国产精品爽爽爽爽爽爽在线观看| 国产精品九九久久久久久久| 欧美激情亚洲精品| 国产成人涩涩涩视频在线观看| 久久91精品国产91久久跳| 蜜臀久久99精品久久久无需会员| 清纯唯美亚洲综合| 精品中文字幕在线观看| 欧美天堂在线观看| 日本精品中文字幕| 正在播放亚洲1区| 国产精品中文字幕在线| 欧美日韩中文字幕日韩欧美| 欧美老肥婆性猛交视频| 国产精品88a∨| 日韩精品黄色网| 91午夜在线播放| 亚洲欧美日韩图片| 亚洲春色另类小说| 精品日韩中文字幕| 欧洲成人免费视频| 尤物99国产成人精品视频| 国产成人精品日本亚洲专区61| 欧美激情在线观看视频| 国产成人精品免费久久久久| 久久久久成人精品| 在线观看精品国产视频| 国产精品成人av性教育| 久久久久久国产| 精品国产91乱高清在线观看| 欧美性受xxxx白人性爽| 欧美在线播放视频| 中文精品99久久国产香蕉| 精品国产拍在线观看| 国产亚洲精品久久久久久牛牛| 色综久久综合桃花网| 亚洲高清免费观看高清完整版| 国产精品影片在线观看| 亚洲一区二区中文字幕| 精品视频在线观看日韩| 亚洲成人激情图| 精品激情国产视频| 久久视频精品在线| 亚洲成人教育av| 亚洲电影免费观看高清完整版在线观看| 国产日本欧美一区二区三区在线| 91在线直播亚洲| 精品久久久久久久久久久久久| 国产精品一区二区久久国产| 尤物tv国产一区| 国产在线日韩在线| 91色琪琪电影亚洲精品久久|