我正在做一个项目,我遇到了一个特定网址的问题,该网址不想与我为其制作的网址正则表达式匹配。此外,直到今天它都运行良好。
这是带有按钮的 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/