RkBlog

Hardware, programming and astronomy tutorials and reviews.

Blog w Django IV - Kanał RSS i Sitemap

Rozbudowujemy blog w Django o obsługę kanałów RSS i map Sitemap ułatwiających indeksowanie serwisów przez wyszukiwarki internetowe.

Na początek zajmiemy się polem "wykop". Otóż gdy nie podamy odnośnika (wartości) dla tego pola to przy newsie ma pojawić się odnośnik umożliwiający zgłoszenie wiadomości do wykopu. Gdy odnośnik jest podany to wyświetlamy go ze stosownym komunikatem. W szablonie show.html (podobnie w innych) wystarczy dać:
{% if news.wykop %}
	<a href="{{ news.wykop }}">Głosuj na Wykopie</a>
{% else %}
	<a href="http://www.wykop.pl/dodaj?url=http://www.MOJASTRONA.pl/news/{{ news.slug }}/" target="_blank">Dodaj na Wykop.pl</a>
{% endif %}
I gotowe :) Oczywiście "MOJASTRONA" zastępujemy poprawnym odnośnikiem do naszej strony

Django oferuje własny system do generowania kanałów RSS i map Sitemap. Zaczniemy od tego pierwszego tworząc plik /blog/news/feeds.py o kodzie:
from blog.news.models import *
from django.contrib.syndication.feeds import Feed

class LatestNews(Feed):
	title = 'Wiadomości z MOJASTRONA.pl'
	link = 'MOJASTRONA.pl'
	description = 'Wiadomości z MOJASTRONA.pl'
	def items(self):
		return News.objects.order_by('-id')[:15]
Standardowy kod bazujący na systemie kanałów RSS. Dodatkowo w models.py w modelu "News" musimy dodać metodę określającą odnośnik do szczegółowego widoku wiadomości (używany do generowania kanału):
def get_absolute_url(self):
	return '/news/' + self.slug + '/'
Następnie edytujemy urls.py dodajemy:
from blog.news.feeds import *
feeds = {
    'news': LatestNews,
}
A do reguł mapowania URLi:
(r'^rss/(?P<url>.*)/$', 'django.contrib.syndication.views.feed', {'feed_dict': feeds}),
Teraz pod /rss/news/ znajdziemy nasz kanał. Klucz słownika "feeds", czyli news używany jest do określania konkretnego kanału. Obecnie nasz kanał nie wyświetla danych zbyt poprawnie (brak treści) - musimy podać jakie pola mają być wyświetlane. W katalogu /templates tworzymy katalog feeds, a w nim plik news_title.html o zawartości:
{{ obj.title }}
Oraz news_description.html o kodzie:
{{ obj.text }}
I gotowe :) Nazwy szablonów w katalogu feeds mają "składnię" - NAZWA-KANAŁU_NAZWA-POLA.html, a rola szablonów to określenie jakie pola z modelu mają być wyświetlane w danym polu kanału RSS.

By stworzyć mapę Sitemap używaną m.in. przez wyszukiwarkę Google do sprawniejszego indeksowania serwisów wystarczy... w pliku settings.py do INSTALLED_APPS dodać:
'django.contrib.sitemaps'
Do news/feeds.py dodać:
from django.contrib.sitemaps import Sitemap
class NewsMap(Sitemap):
	def items( self ):
		return News.objects.all()
	def lastmod( self, obj ):
		return obj.date
	def changefreq(self, obj):
		return 'monthly'
Do urls.py dodajemy:
sitemaps = {
	'news': NewsMap,
	}
A do reguł mapowania:
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
I gotowe. Pod /sitemap.xml czeka gotowa mapa. Odnośnik podajemy na stronie Google Narzędzia dla Webmasterów. Otrzymamy system "statystyk" indeksowania naszej strony. Po dodaniu mapy będziemy musieli potwierdzić że nasza strona należy do nas - do sekcji HEAD strony będziemy musieli dodać odpowiedniego taga HTML. Gdy będziemy mieli to za sobą wszystko będzie działać zgodnie z planem. Mapa będzie regularnie sprawdzana przez wyszukiwarkę.

Źródła

Pobierz źródła
Po rozpakowaniu edytuj ścieżkę w urls.py i settings.py a następnie stwórz tabele i superadmina.
RkBlog

14 July 2008;

Comment article