Django Web 应用中的 URL 哈希处理
如果用户的 URL 类型模式已经确定,比如说,
1. myurl.com/feeds/recnets/
2. myurl.com/feeds/users/
3. myurl.com/feeds/tags/
4. myurl.com/feeds/~
我想根据这些模式创建一个字典,以便从中传递特定的功能。
所以我在 urls.py 文件中创建了一个字典类型,并传递了它的字典参数。(见下文)
1 import os.path
2 from django.conf.urls import patterns, include, url
3 from bookmarks.views import *
4 from django.contrib import admin
5 from django.views.generic import TemplateView
6 from bookmarks.feeds import *
7
8 admin.autodiscover()
9
10 site_media = os.path.join(
11 os.path.dirname(__file__), 'site_media'
12 )
13
14 feeds = {
15 'recents' : RecentBookmarks(),
16 'user' : UserBookmarks()
17 }
18
19 urlpatterns = patterns('',
20 # Feeds
21 (r'^feeds/(?P<url>.*)$',
22 feeds),
但是,正如我预期的那样,这并没有成功,因为 urls.py 没有区分参数的名称。
我还参考了 Django 项目的文档来解决这个问题,但我找不到如何在 URL 端传递哈希参数给函数的方法。
2 个回答
1
在项目文件夹里:根据 Django 1.6
的要求,找到 urls.py 文件。
from django.conf.urls import include, url
from bookmarks import *
urlpatterns = [
# ... snip ...
url(r'^feeds/', include('bookmarks.urls')),
# ... snip ...
]
在书签文件夹里创建一个文件,命名为 urls.py。
from bookmarks import *
from django.conf.urls import url
urlpatterns = [
url(r'^recents/$', 'bookmarks.view.RecentBookmarks'),
url(r'^user/$', 'bookmarks.view.UserBookmarks'),
#so on for all the urls
]
注意:如果在导入时有错误,可以随意修改代码。
1
进一步解释一下上面的回答。
最好把每个应用特有的链接放在各自应用文件夹里的 urls.py 文件中。然后你可以在根目录的 urls.py 文件中包含每个应用的链接。
例如:
Project/
-- urls.py # Root urls.py
-- app1/
--- urls.py # App specific urls.py
-- app2/
--- urls.py
每个链接都应该有自己的格式,并且要和一个视图相关联,比如:
### app1/urls.py ###
urlpatterns = (
url(r'^recents/$', RecentBookmarks.as_view()),
# Samefor all the urls
)
想了解更多关于包含链接格式的信息,可以查看这里:https://docs.djangoproject.com/en/1.6/topics/http/urls/#including-other-urlconfs
如果想进一步学习,你还可以看看如何使用链接命名空间,可以参考这里:https://docs.djangoproject.com/en/1.6/intro/tutorial03/#namespacing-url-names