python - Django url 不匹配

标签 python html regex django url

我正在做一个项目,我遇到了一个特定网址的问题,该网址不想与我为其制作的网址正则表达式匹配。此外,直到今天它都运行良好。

这是带有按钮的 html 代码

    <button class="btn editar" onclick="location.href='{% url 'ver_caso' caso_id=caso.id %}';">Crear caso</button>

这里是 urls.py 文件中的所有 url

urlpatterns = [    

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    #Casos en curso
    url(r'^casos/en_curso/buscador_inteligente/editar_entidad/(?P<tipo>[A-z úé]+)/(?P<id_ent>\d+)/(?P<id_caso>\d+)/$', views.editar_entidad, name='editar_entidad'),
    url(r'^casos/en_curso/buscador_inteligente/guardar_resultadoInteligente/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.guardar_resultadoInteligente, name='guardar_resultadoInteligente'),
    url(r'^casos/en_curso/buscador_guiado/guardar_resultadoGuiado/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.guardar_resultadoGuiado, name='guardar_resultadoGuiado'),
    url(r'^casos/en_curso/buscado_general/guardar_resultadoGeneral/(?P<caso_id>\d+)/(?P<expresion>.+)/$', views.guardar_resultadoGeneral, name='guardar_resultadoGeneral'),
    url(r'^casos/en_curso/buscador_inteligente/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.buscador_inteligente, name='buscador_inteligente'),
    url(r'^casos/en_curso/buscador_guiado/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.buscador_guiado, name='buscador_guiado'),
    url(r'casos/en_curso/compartir_casos/(?P<caso_id>\d+)/(?P<tipo>[A-z úé]+)/$', views.compartir_casos, name='compartir_casos'),
    url(r'^casos/en_curso/administrar_casos/(?P<tipo>[A-z úé]+)/$', views.administrar_casos, name='administrar_casos'),
    url(r'^casos/en_curso/buscador_general/(?P<caso_id>\d+)/$', views.buscador_general, name='buscador_general'),
    url(r'^casos/en_curso/agregar_doc/(?P<caso_id>\d+)/$', views.agregar_doc, name='agregar_doc'),
    url(r'^casos/en_curso/nuevo_caso/$', views.nuevo_caso, name='nuevo_caso'),
    url(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)$', views.ver_caso, name='ver_caso'),
    url(r'^casos/en_curso/$', views.casos, name='casos'),

    #Resultados
    url(r'^resultados/eliminar_resultadoCaso/(?P<caso_id>\d+)/(?P<resultado_id>\d+)/(?P<tipo>[A-z úé]+)/$', views.eliminar_resultadoCaso, name='eliminar_resultadoCaso'),
    url(r'^resultados/eliminar_resultado/(?P<caso_id>\d+)/(?P<resultado_id>\d+)/(?P<tipo>[A-z úé]+)/$', views.eliminar_resultado, name='eliminar_resultado'),
    url(r'^resultados/crearInforme/(?P<resultado_id>\d+)/(?P<tipo_informe>[A-z úé]+)/$', views.crearInforme, name='crearInforme'),
    url(r'^resultados/ver_resultado/(?P<resultado_id>\d+)/(?P<tipo>[A-z úé]+)/$', views.ver_resultado, name='ver_resultado'),
    url(r'^resultados/$', views.resultados, name='resultados'),

    #Casos finalizados
    url(r'^casos/documentos_caso/(?P<caso_id>\d+)/(?P<destino>FrontEnd/documentos_[a-z]+\.html)/$', views.documentos_caso, name='documentos_caso'),
    url(r'^casos/resultados_caso/(?P<caso_id>\d+)/(?P<destino>FrontEnd/resultados_[a-z]+\.html)/$', views.resultados_caso, name='resultados_caso'),
    url(r'^casos/informes_caso/(?P<caso_id>\d+)/(?P<destino>FrontEnd/informes_[a-z]+\.html)/$', views.informes_caso, name='informes_caso'),
    url(r'casos/finalizados/compartir_casosFinalizado/(?P<caso_id>\d+)/$', views.compartir_casoFinalizado, name='compartir_casoFinalizado'),
    url(r'^casos/finalizados/eliminar_finalizado/(?P<caso_id>\d+)/$', views.eliminar_finalizado, name='eliminar_finalizado'),
    url(r'^casos/finalizados/$', views.casos_finalizados, name='casos_finalizados'),

    #Documentos
    url(r'^documentos/mensaje_nuevo/(?P<id_doc>\d+)/(?P<id_caso>\d+)/$', views.mensaje_nuevo, name='mensaje_nuevo'),
    url(r'^documentos/eliminar_doc/(?P<id_doc>\d+)/(?P<id_caso>\d+)/$', views.eliminar_doc, name='eliminar_doc'),
    url(r'^documentos/agregar_docDocumentos/(?P<caso_id>\d+)/$', views.agregar_docDocumentos, name='agregar_docDocumentos'),
    url(r'^documentos/agregar_docCaso/(?P<caso_id>\d+)/$', views.agregar_docCaso, name='agregar_docCaso'),
    url(r'^documentos/ver_doc/(?P<id_doc>\d+)/$', views.ver_doc, name='ver_doc'),
    url(r'^documentos/$', views.documentos, name='documentos'),

    #Notas
    url(r'^notas/eliminar_nota/(?P<id>\d+)/(?P<tipo>[A-z úé]+)/(?P<id_nota>\d+)/$', views.eliminar_nota, name='eliminar_nota'),
    url(r'^ver_notas/eliminar_notacaso/(?P<id_caso>\d+)/(?P<id_nota>\d+)/$', views.eliminar_notacaso, name='eliminar_notacaso'),
    url(r'^notas/(?P<id>\d+)/(?P<tipo>[A-z úé]+)/$', views.notas, name='notas'),
    url(r'^ver_notas/crear_nota/(?P<id_caso>\d+)/$', views.crear_nota, name='crear_nota'),
    url(r'^ver_notas/$', views.ver_notas, name='ver_notas'),

    #Informes
    url(r'^informes/eliminar_informe/(?P<informe_id>\d+)/$', views.eliminar_informe, name='eliminar_informe'),
    url(r'^informes/ver_informe/(?P<id_informe>\d+)/$', views.ver_informe, name='ver_informe'),
    url(r'^informes/$', views.informes, name='informes'),

    url(r'^login/$',
        django.contrib.auth.views.login,
        {
            'redirect_authenticated_user': True,
            'template_name': 'FrontEnd/login.html',
            'authentication_form': FrontEnd.forms.BootstrapAuthenticationForm,
            'extra_context':
            {
                'title': 'Iniciar sesión',
                'year': datetime.now().year,
            }
        },
        name='login'),
    url(r'^logout/$', views.logout_view, name='logout'),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),

    # Home
    url(r'^eliminar_docInicio/(?P<id_doc>\d+)/$', views.eliminar_docInicio, name='eliminar_docInicio'),
    url(r'^eliminar_mensaje/(?P<id_msj>\d+)/$', views.eliminar_mensaje, name='eliminar_mensaje'),
    url(r'^eliminar_usuario/$', views.eliminar_usuario, name='eliminar_usuario'),
    url(r'^crear_usuario/$', views.crear_usuario, name='crear_usuario'),
    url(r'^$', views.home, name='home'),
]

它应该起作用的 View 是这个

@login_required
def ver_caso(request,caso_id):
    """ Editar un caso ya existente"""
    caso = Caso.objects.get(id=caso_id)
    check_owner(caso.propietario, request.user)
    if request.method == 'POST':
        #Actualizar el caso
        form = CasoFormEdit(instance=caso, data=request.POST)
        if form.is_valid():
            form.save()
            print("entro")
            return HttpResponseRedirect(reverse('casos'))
    else:
        #Solicita el caso para ser modificado, con información precargada
        form = CasoFormEdit(instance=caso)

    context = {'form':form, 
               'caso': caso, 
               'caso_nombre':caso.nombre, 
               'documentos':documentos,
               'title':'Editar caso',
               }

    return render(request,'FrontEnd/editar_caso.html',context)

我认为这应该很好用,因为我找不到任何错误,但它不断将我重定向到我单击该按钮时所在的同一页面

在这里,您可以看到页面加载时以及单击该按钮时显示控制台的内容。它一直这样做

[15/Mar/2019 20:59:48] "GET / HTTP/1.1" 200 28390
[15/Mar/2019 20:59:49] "GET / HTTP/1.1" 200 28390
[15/Mar/2019 20:59:50] "GET / HTTP/1.1" 200 28390
[15/Mar/2019 20:59:51] "GET /casos/en_curso/ HTTP/1.1" 200 16825
[15/Mar/2019 20:59:51] "GET /casos/en_curso/ HTTP/1.1" 200 16825
[15/Mar/2019 20:59:53] "POST /casos/en_curso/ HTTP/1.1" 200 16825
[15/Mar/2019 20:59:53] "GET /casos/en_curso/ HTTP/1.1" 200 16825
[15/Mar/2019 21:00:02] "POST /casos/en_curso/ HTTP/1.1" 200 16825
[15/Mar/2019 21:00:02] "GET /casos/en_curso/ HTTP/1.1" 200 16825

任何帮助都会很棒。预先感谢您

更新

回答FailSafe问题,无效的url是这个

url(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)$', views.ver_caso, name='ver_caso'),

它位于 urls.py 文件中的第一个 url block 内,是最后一个上面的 url

#Casos en curso
    url(r'^casos/en_curso/buscador_inteligente/editar_entidad/(?P<tipo>[A-z úé]+)/(?P<id_ent>\d+)/(?P<id_caso>\d+)/$', views.editar_entidad, name='editar_entidad'),
    url(r'^casos/en_curso/buscador_inteligente/guardar_resultadoInteligente/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.guardar_resultadoInteligente, name='guardar_resultadoInteligente'),
    url(r'^casos/en_curso/buscador_guiado/guardar_resultadoGuiado/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.guardar_resultadoGuiado, name='guardar_resultadoGuiado'),
    url(r'^casos/en_curso/buscado_general/guardar_resultadoGeneral/(?P<caso_id>\d+)/(?P<expresion>.+)/$', views.guardar_resultadoGeneral, name='guardar_resultadoGeneral'),
    url(r'^casos/en_curso/buscador_inteligente/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.buscador_inteligente, name='buscador_inteligente'),
    url(r'^casos/en_curso/buscador_guiado/(?P<tipo>[A-z úé]+)/(?P<caso_id>\d+)/$', views.buscador_guiado, name='buscador_guiado'),
    url(r'casos/en_curso/compartir_casos/(?P<caso_id>\d+)/(?P<tipo>[A-z úé]+)/$', views.compartir_casos, name='compartir_casos'),
    url(r'^casos/en_curso/administrar_casos/(?P<tipo>[A-z úé]+)/$', views.administrar_casos, name='administrar_casos'),
    url(r'^casos/en_curso/buscador_general/(?P<caso_id>\d+)/$', views.buscador_general, name='buscador_general'),
    url(r'^casos/en_curso/agregar_doc/(?P<caso_id>\d+)/$', views.agregar_doc, name='agregar_doc'),
    url(r'^casos/en_curso/nuevo_caso/$', views.nuevo_caso, name='nuevo_caso'),
    url(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)$', views.ver_caso, name='ver_caso'),
    url(r'^casos/en_curso/$', views.casos, name='casos'),

我假设当我单击该按钮时,匹配的 url 是该 block 的最后一个。如果这不是发生的事情,那么我不知道它应该是什么

最佳答案

不是最终的解决方案,但 url 模式末尾缺少的斜杠可能是无意的(因为所有其他 url 都有它),这可能会产生意想不到的后果。这是先不带斜线,然后带斜线的模式:

url(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)$', views.ver_caso, name='ver_caso'),
url(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)/$', views.ver_caso, name='ver_caso'),

除此之外,问题似乎出在模板上;您调用的 URL (/casos/en_curso/) 与您预期的不同。您是否尝试过手动输入正确的 URL,例如。 yoursite.com/casos/en_curso/ver_caso/1234/? (更正模式后在末尾添加斜杠。)

我的猜测是它会起作用,表明 url 配置没问题。

关于python - Django url 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192232/

相关文章:

html - CSS 按钮样式

ruby - 在 ruby​​ 中使用正则表达式计算字符串中数字和字符的长度

python - 使用python用分隔符分割字符串,同时忽略引号内的分隔符和转义引号

python - 为什么我使用 pandas Series.asfreq 收到 is_monotonic 断言错误

python - Django 查询集使用 relatedManager 按 order_by 排序

java - 在具有负权重的加权 DAG 中查找两个节点之间的最短路径

html - 简单的 HTML 下划线

python - 按照 TensorFlow 教程但无法获得准确的模型预测

javascript - 传单 TileWMS 边界

python - 如何从python中的字符串中获取url