我正在做一个项目,我遇到了一个特定的URL的问题,该URL不希望与我为此创建的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'),
]
应该认为的观点是这个观点
@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(r'^casos/en_curso/ver_caso/(?P<caso_id>\d+)$', views.ver_caso, name='ver_caso'),
它位于urls.py文件中的第一个url块内,位于最后一个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是该块的最后一个。如果那不是事实,那我就不知道那应该是什么
答案 0 :(得分:0)
不是最终解决方案,但是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'),
除此之外,问题似乎出在模板中。您呼叫的网址(/casos/en_curso/
)与您打算的不同。您是否尝试过手动输入正确的URL,例如。 yoursite.com/casos/en_curso/ver_caso/1234/
? (在纠正了模式后在末尾添加了斜杠。)
我的猜测是它会起作用,表明url配置很好。