【发布时间】:2010-07-26 09:54:02
【问题描述】:
我有一个 web 应用程序,它将根据 url 的第一部分返回一个用户 ID,就像 Twitter:
http://www.myapplication.com/user-name-goes-here/
它也可以更深入,像这样:
http://www.myapplication.com/user-name-goes-here/news/article_1/
为了分解网站,我使用了以下 URL 路由技术:
(r'^(?P<slug>\w+)/', include('myapp.sites.urls')),
这将进一步将用户路由到正确的页面,但就目前而言,我必须在每个视图中查询数据库才能根据第一个 url 段获取 user_id。我希望以某种方式自动执行此操作,这样我就不必每次都使用相同的代码来膨胀我的视图...我的解决方案是创建一些中间件来检查 url 段并在未找到时返回 404:
from django.http import Http404
class DomainMiddleware(object):
def process_request(self, request):
from myapp.sites.models import Sites
dname = request.path.split('/')[1]
if not dname:
return
try:
d = Sites.objects.get(domain__exact=dname)
except Sites.DoesNotExist:
raise Http404
return
这可行,但它会尝试解析每个请求,甚至是图像、网站图标等的请求。
我的问题是这样的;有没有办法在每次页面加载时运行此查询,而不会用额外的代码阻塞我的视图?如果中间件是解决方案,我该如何修改我的代码,使其不包含每个请求,只包含那些成功路由 URL 的请求?
希望有人能提供帮助!
【问题讨论】:
标签: django django-urls