带命名空间的django反转

django reverse with namespace

我收到这个错误:

The included urlconf 'unsitiodigital.urls' does not appear to have any patterns in it.

回溯指向这一行

class Contacto(FormView):
    template_name = "contacto.html"
    form_class = FormContacto
    success_url = reverse("main:mensaje_enviado") -->This Line

    def form_valid(self, form):

        form.send_email()
        return super(Contacto, self).form_valid(form)

有有效的模式,它可以在没有 reverse 行的情况下工作。 urls.py - 一般

urlpatterns = [    
    url(r'^', include('main.urls', namespace="main")),
    url(r'^admin/', include(admin.site.urls)),
]

urls.py - 主要

from django.conf.urls import url

from main import views

urlpatterns = [
        url(r'^$', views.Inicio.as_view(), name='inicio'),
        url(r'^quienes_somos/$', views.QuienesSomos.as_view(), name='quienes_somos'),
        url(r'^opciones/$', views.Opciones.as_view(), name='opciones'),
        url(r'^contacto/$', views.Contacto.as_view(), name='contacto'),
->      url(r'^mensaje_enviado/$', views.MensajeEnviado.as_view(), name='mensaje_enviado')
]

那么,“哪个是 reverse 的正确用户?”。非常感谢。

包含路径一定是错误的

url(r'^', include('main.urls', namespace="main")),  # the 'main.urls' path must be wrong

您可以通过一些方式包含其他网址。尝试从 main.url 模块导入模式而不是

from main.urls import urlpatterns as main_urls

url(r'^', include(main_urls, namespace="main"),

您还必须在 success_url 中使用 reverse_lazy

from django.core.urlresolvers import reverse_lazy

class Contacto(FormView):
    template_name = "contacto.html"
    form_class = FormContacto
    success_url = reverse_lazy("main:mensaje_enviado")

It is useful for when you need to use a URL reversal before your project’s URLConf is loaded.