我想运行两个具有相同url模式的应用程序。我想避免有一个应用程序特定的slugdomain.com/pages/something-在这儿还是domain.com/blog/something-在那里。在
我试过了:
# urls.py
urlpatterns = patterns('',
url(r'^$', 'my.homepage.view'),
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('pages.urls')),
url(r'^', include('blog.urls')),
)
# pages/urls.py
urlpatterns = patterns('',
url(r'^(.+)/$', views.page),
)
# blog/urls.py
urlpatterns = patterns('',
url(r'^(.+)/$', views.post),
)
我的代码不起作用,无论哪个include在前面(这里,页面.url)工作正常,其他网址(博客)抛出404。在
提前谢谢
编辑:我是这样做的:创建胶水.py在同一目录中设置.py. 它将处理我的主页和以下dispatcher视图:
^{pr2}$我不知道是否可以。我希望有更好的方法。在
谢谢你的评论。在
你想让这个怎么样?它们都使用同一个URL(这当然会导致问题)。用户如何访问“页面”而不是“博客”,反之亦然?在
一般来说,在URL模式中不能有重叠的URL(不包括额外的数据)。在
编辑:
所以你想让第一个应用程序检查它是否有一个与URL匹配的视图,如果第一个不匹配,下一个就接管它?你可以做一些复杂的事情,比如写一个“视图匹配器”来实现你想要的,但是还有很多更为严格的解决方案。在
最简单的方法是改变你的应用程序的
slug
生成函数。有一个使用除下划线以外的一些限定符,或者总是将应用程序的名称附加到slug。这样你就可以找到页面,因为它们的url是“some slug page”,而blog是“some slug blog”,然后你可以为它编写一个url模式。如果不想添加整个URL,可以只在第一个字母前加上/加上任何你想要的。在只需考虑一种您可以接受的方法,为每个应用程序生成URL,只需读取URL,就可以知道该页面属于哪个应用程序。
这不起作用,因为django url是按顺序解析的,这意味着与regexp匹配的第一个url将是已解析的url。在您的例子中,将永远不会搜索blogs应用程序中包含的url,因为django已经解析了pages includes行上的url。在
另外,django url模块不应该知道某个页面或博客文章是否存在,因为我相信在您的应用程序中,这是由数据库查找决定的。在
url模块只执行连接到匹配的第一个regexp的视图。在
你应该改变你的逻辑,比如把perpending“blog/”改为blog url(这有什么问题?)在
注意,我将blog url向上移动,因为大多数通用的regxexp应该是django url解析器最后一次尝试的。在
或者,您可以编写一个代理视图来尝试博客文章和页面。但这似乎不是对我最好的方式。在
我不知道这是不是更好的答案。但是,如果你对这些情况感到满意。。在
如果您的django应用程序基于django模板呈现。
您所说的url不需要通过在浏览器中键入端点来直接访问。
然后,也许您可以考虑url名称空间和模板重定向。在
https://docs.djangoproject.com/en/1.11/topics/http/urls/#url-namespaces
相关问题 更多 >
编程相关推荐