Pinax源代碼分析12 - tribes, wiki, projects
tribes
url
(r'^tribes/', include('tribes.urls')),
邏輯與模板
urlpatterns = /
patterns('',
#創建小組
url(r'^create/$', 'tribes.views.create', name="tribe_create"),
#當前用戶參加的小組
url(r'^your_tribes/$', 'tribes.views.your_tribes', name="your_tribes"),
#小組列表,採用不同的方式排序
url(r'^$', 'tribes.views.tribes', name="tribe_list"),
url(r'^order/topics/least-topics/$', 'tribes.views.tribes',
{'order': 'least_topics'}, name="tribe_list_least_topics"),
url(r'^order/topics/most-topics/$', 'tribes.views.tribes',
{'order': 'most_topics'}, name="tribe_list_most_topics"),
url(r'^order/members/least-members/$', 'tribes.views.tribes',
{'order': 'least_members'}, name="tribe_list_least_members"),
url(r'^order/members/most-members/$', 'tribes.views.tribes',
{'order': 'most_members'}, name="tribe_list_most_members"),
url(r'^order/name/ascending/$', 'tribes.views.tribes',
{'order': 'name_ascending'}, name="tribe_list_name_ascending"),
url(r'^order/name/descending/$', 'tribes.views.tribes',
{'order': 'name_descending'}, name="tribe_list_name_descending"),
url(r'^order/date/oldest/$', 'tribes.views.tribes',
{'order': 'date_oldest'}, name="tribe_list_date_oldest"),
url(r'^order/date/newest/$', 'tribes.views.tribes',
{'order': 'date_newest'}, name="tribe_list_date_newest"),
# tribe-specific
#小組的信息,成員,組內的帖子和Tweets。負責更新小組信息,加入和退出小組。
url(r'^tribe/([-/w]+)/$', 'tribes.views.tribe', name="tribe_detail"),
#刪除小組
url(r'^tribe/([-/w]+)/delete/$', 'tribes.views.delete', name="tribe_delete"),
# topics
#顯示小組的帖子列表
url(r'^tribe/([-/w]+)/topics/$', 'tribes.views.topics', name="tribe_topics"),
#顯示wiki文章
url(r'^topic/(/d+)/edit/$', 'tribes.views.topic', kwargs={"edit": True}, name="tribe_topic_edit"),
#刪除帖子
url(r'^topic/(/d+)/delete/$', 'tribes.views.topic_delete', name="tribe_topic_delete"),
#顯示一篇帖子
url(r'^topic/(/d+)/$', 'tribes.views.topic', name="tribe_topic"),
#小組內置wiki
# wiki
url(r'^tribe/(?P<group_slug>/w+)/wiki/', include('wiki.urls'), kwargs=wiki_args),
)
tribes app 應用了 wikiapp,views.tribe中有如下幾行:
articles = Article.objects.filter(
content_type=get_ct(tribe),
object_id=tribe.id).order_by('-last_update')
其中 get_ct 在 wiki.views 中定義。
tribe.html 模板使用了wiki 定義的模板標籤:
{% load wiki %}
{% load wikiurl %}
{% if articles %}
<table class="topics">
{% for article in articles %}
{% show_teaser article %}
{% endfor %}
</table>
<p><a href="{% wikiurl list tribe %}">{% trans "more..." %}</a></p>
{% else %}
{% wikiurl list tribe as wiki_url %}
<p>
{% blocktrans %}
None yet. Go to the <a href="{{ wiki_url }}" title="wiki">wiki</a> to start a new article.
{% endblocktrans %}
</p>
{% endif %}
wiki
url
在blog的urls.py中定義:
wiki_args = {'group_slug_field': 'slug',
'group_qs': Tribe.objects.filter(deleted=False)}
url(r'^tribe/(?P<group_slug>/w+)/wiki/', include('wiki.urls'), kwargs=wiki_args),
在projects的urls.py中定義:
wiki_args = {
'group_slug_field': 'slug',
'group_qs': Project.objects.filter(deleted=False),
'is_member': (lambda user, group: group.has_member(user)),
'is_private': (lambda group: group.private),
}
url(r'^project/(?P<group_slug>/w+)/wiki/', include('wiki.urls'), kwargs=wiki_args),
邏輯與模板
urlpatterns = patterns('',
#全部wiki 文章列表
url(r'^$', views.article_list, name='wiki_index'),
url(r'^list/$', views.article_list, name='wiki_list'),
#搜索
url(r'^search/$', views.search_article, name="wiki_search"),
#整個wiki的歷史,訪問出錯
url(r'^history/$', views.history, name='wiki_history'),
#feeds
url(r'^feeds/(?P<feedtype>/w+)/$', views.history_feed, name='wiki_history_feed'),
#單篇文章歷史的feeds
url(r'^(?P<title>'+ WIKI_URL_RE +r')/feeds/(?P<feedtype>/w+)/$', views.article_history_feed,
name='wiki_article_history_feed'),
#瀏覽文章
url(r'^(?P<title>'+ WIKI_URL_RE +r')/$', views.view_article, name='wiki_article'),
#編輯文章
url(r'^edit/(?P<title>'+ WIKI_URL_RE +r')/$', views.edit_article, name='wiki_edit'),
#關注文章,依賴於notification.models.observe
url(r'observe/(?P<title>'+ WIKI_URL_RE +r')/$', views.observe_article, name='wiki_observe'),
#停止關注文章依賴於notification.models.stop_observing
url(r'observe/(?P<title>'+ WIKI_URL_RE +r')/stop/$', views.stop_observing_article,
name='wiki_stop_observing'),
#單篇文章歷史
url(r'^history/(?P<title>'+ WIKI_URL_RE +r')/$', views.article_history, name='wiki_article_history'),
#瀏覽一篇文章的指定歷史版本
url(r'^history/(?P<title>'+ WIKI_URL_RE +r')/changeset/(?P<revision>/d+)/$', views.view_changeset,
name='wiki_changeset',),
#將文章回退到指定的版本
url(r'^history/(?P<title>'+ WIKI_URL_RE +r')/revert/$', views.revert_to_revision,
name='wiki_revert_to_revision'),
)
projects
url
(r'^projects/', include('projects.urls')),
邏輯與模板
urlpatterns = /
patterns('',
#創建項目,項目列表,……與tribes一樣省略若干行……
#查看成員的狀態,負責處理改變自己狀態的請求
url(r'^project/([-/w]+)/members_status/$', 'projects.views.members_status', name="project_members_status"),
#所有的任務
url(r'^project/([-/w]+)/tasks/$', 'projects.views.tasks', name="project_tasks"),
#瀏覽一個任務,負責將任務指派給某人。如果是任務的負責人可以修改狀態、標記解決、開啓和關閉任務。
url(r'^task/(/d+)/$', 'projects.views.task', name="project_task"),
#指定用戶的所有任務
url(r'^tasks/([-/w]+)/$', 'projects.views.user_tasks', name="project_user_tasks"),
#帖子、wiki,還是和tribes一樣。
)
user_tasks.html 模板使用了 shorttimesince_tag 自定義標籤,它是在 misc 中定義的,顯示時間差,和Django內置的timesince不同,使用所寫單位,例如yr = year,mn=month,wk=weekd=day……