Django中的命名空间反向解析

4
我正在遇到这个错误:
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')
]

那么,反转的正确用法是什么?非常感谢。
1个回答

10

包含路径可能错误

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

有一些方法可以包含其他的url,尝试从main.url模块中导入patterns。

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")

在项目的URLConf加载之前需要使用URL反转时,它非常有用。


非常感谢,使用reverse_lazy解决了问题。include也正常工作。现在我会查看reverse_lazy文档以便理解它。 - Alejandro Veintimilla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接