Django Web 应用中的 URL 哈希处理

0 投票
2 回答
1807 浏览
提问于 2025-04-18 05:06

如果用户的 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

撰写回答