django 注册 redux URL 受具有多个查询参数的 url 影响

Posted

技术标签:

【中文标题】django 注册 redux URL 受具有多个查询参数的 url 影响【英文标题】:django registration redux URL's being effected by url with multiple query parameters 【发布时间】:2016-02-26 01:26:51 【问题描述】:

当使用以下 url 时,由 django 注册 redux 提供的 My Url 不起作用:

url(r'^(?P<username>\w+)/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),

但是如果我像这样向该网址添加另一个级别,它们确实可以工作:

url(r'^projects/(?P<username>\w+)/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),

如果可能的话,我不想在其中添加额外的项目/ url 级别。为什么它会影响 django 注册 redux url,我该如何解决?任何帮助将不胜感激:-)

项目网址

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf import settings
from registration.backends.simple.views import RegistrationView

class MyRegistrationView(RegistrationView):  #redirects to home page after registration
    def get_success_url(self,request, user):
        return '/register_profile'

urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('howdidu.urls')),
    url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
    (r'^accounts/', include('registration.backends.simple.urls')),

)

# media
if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'^media/(?P<path>.*)',
        'serve',
        'document_root': settings.MEDIA_ROOT), )

应用网址

from django.conf.urls import patterns, url
from howdidu import views
from django.contrib.auth.decorators import login_required

urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^register_profile/$', views.register_profile, name='register_profile'),
        url(r'^update_profile/$', views.update_profile, name='update_profile'),
        url(r'^create_project/$', login_required(views.CreateProject.as_view()), name='create_project'),
        url(r'^(?P<username>\w+)/$', views.profile_page, name='user_profile'),
        url(r'^(?P<username>\w+)/(?P<slug>[-\w]+)/$', views.project_page, name='user_project'),
        )

【问题讨论】:

当您说它不起作用时,请同时发布问题所在。如果您有任何错误,请发布错误。这将使我们免于运行您的代码。 顺便说一句,当你说 redux 时,我猜你的意思是 regex 您好,是djangoregistration redux,是一个注册应用。当我单击与该应用程序相关的任何链接时,例如注册、登录或注销,它将尝试加载到 url(r'^(?P\w+)/(?P[-\w] +)/$',views.project_page,name='user_project'),但是浏览器中的url是127.0.0.1:8000/accounts/logout/?next= 【参考方案1】:

问题是你的url排序,看看这个:

url(r'^admin/', include(admin.site.urls)),
url(r'', include('howdidu.urls')),
url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
url(r'^accounts/', include('registration.backends.simple.urls')),

尤其是这个:

url(r'', include('howdidu.urls')),

这个 url 匹配所有内容,所以基本上 Django 会从上到下,如果在 url(r'', include('howdidu.urls')) 之前没有找到任何匹配项,它将匹配任何内容。这意味着你永远不会匹配

url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
url(r'^accounts/', include('registration.backends.simple.urls')),

解决它的一种方法是将url(r'', include('howdidu.urls')) 放在网址的最底部:

url(r'^admin/', include(admin.site.urls)),
url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
url(r'^accounts/', include('registration.backends.simple.urls')),
url(r'^', include('howdidu.urls')),

另一种方法是为url(r'^', include('howdidu.urls'))设置另一个url级别:

url(r'^admin/', include(admin.site.urls)),
url(r'^howdidu/', include('howdidu.urls')),
url(r'^accounts/register/$', MyRegistrationView.as_view(), name='registration_register'), #redirects to home page after registration
url(r'^accounts/', include('registration.backends.simple.urls')),

【讨论】:

再次感谢@pythad!!我采用了您将 url(r'', include('howdidu.urls') 移动到底部的第一个修复方法,它起作用了:-)。你是明星!

以上是关于django 注册 redux URL 受具有多个查询参数的 url 影响的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Django-Registration-Redux 注册表单放在其他页面上?

如何覆盖 django-redux 默认用户注册表单

自定义 Django-Registration-Redux 表单

Django url 模式不是注册的视图函数或模式

React/Redux 中具有默认值的文本输入

一个 Django 视图和 url,多个应用程序