Python 如果请求未解析,则继续url匹配-Django

Python 如果请求未解析,则继续url匹配-Django,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我不确定它是否非常具体,但我想我要问的是,在不同的环境中,在不同的地方使用。我的问题主要与我为Django应用程序创建的URL模式有关。我需要一个所有应用程序用户的配置文件URL,所以我创建了一个URL模式,如下所示 urlpatterns = patterns('apps.user_profile.views', url(r"^(?P<username>\w+)/$", 'user_profile', name="user_profile_page"), url(r

我不确定它是否非常具体,但我想我要问的是,在不同的环境中,在不同的地方使用。我的问题主要与我为Django应用程序创建的URL模式有关。我需要一个所有应用程序用户的配置文件URL,所以我创建了一个URL模式,如下所示

urlpatterns = patterns('apps.user_profile.views',
    url(r"^(?P<username>\w+)/$", 'user_profile', name="user_profile_page"),
    url(r"^app/$", 'app', name="app_page"),
)
非常清楚的是,我将URL与路径中的用户名进行映射,以动态获取用户数据。这工作正常,但当系统收到应用程序页面的请求时,问题就出现了。在这种情况下,请求转到用户配置文件,因为它接受所有类型的单词,并在url.py中的app view之前排序

问题:
如果在user_profile view中未解析请求,是否有方法指定继续查看应用程序URL.py中的其他URL?

模式按照写入顺序匹配,因此只需在用户名模式之前移动应用程序模式即可解决问题:

urlpatterns = patterns('apps.user_profile.views',
    url(r"^app/$", 'app', name="app_page"),
    url(r"^(?P<username>\w+)/$", 'user_profile', name="user_profile_page"),

)
现在,只有当url与app/app不匹配时,才会将其发送到您的用户配置文件视图


当然,当用户使用应用程序的用户名注册时,您会遇到问题。

将正则表达式更改为^users/?p\w+/$可能会有所帮助。或者更好的方法是,将^users/映射到另一个url.py并在此处使用?P\w+/$。@burhan:我可以将应用程序放在用户配置文件url之前,但在这种情况下,它会影响我项目中其他应用程序的url,而该url位于用户配置文件应用程序之后。@xbello是的,我可以将其保留为^users/?P\w+/$,但没有其他方法可以实现。这看起来是非常常见的功能。请将您的用户名配置文件URL作为最后一个URL,因为它与任何URL都匹配。@lalit,您要求的是将URL dispatchers放在视图函数中,即如果URL以app开头,则调用app函数的用户配置文件。我认为这是可能的,但你的代码将从一开始就被破坏。使用Django调度程序。查看stackoverflow中的URL:它们以应用程序名用户、问题、标记、未回答的。。。使网站的扩展变得非常容易。