我有这个网址
url(r'^expedienteBusqueda/(?P<credencial>\w+)/(?P<fecha>\d{4})$','ExpMedico.views.Expediente_Detalle', name='consultaexpediente'),
我正在发送客户的凭证和客户预约的日期,我需要使用这2个参数进行搜索,但是,当我点击搜索按钮时,我收到此错误。
Reverse for 'consultaexpediente' with arguments '(u'12335t', datetime.date(2013, 8, 21))' and keyword arguments '{}' not found.
当我只发送凭证时它工作正常,但问题是当我添加日期时。
view.py
@login_required(login_url='/InicieSesion')
def Expediente_Detalle(request, credencial,fecha):
formulario = get_object_or_404(ExpedienteConsultaInicial, credencial_consultainicial=credencial and ExpedienteConsultaInicial, fecha_atencion_18=fecha )
detalle = ConsultasSubsecuentes.objects.filter(Consultasbc_credencial=credencial )
return render(request, 'ExpedienteDetalle.html', {'formulario': formulario, 'detalle':detalle})
models.py
class ExpedienteConsultaInicial(models.Model):
credencial_consultainicial = models.CharField(max_length=10, null=True, blank=True)
fecha_atencion_18 = models.DateField(auto_now=True, null=True, blank=True)
Template.html
<td><a href="{% url consultaexpediente post.credencial_consultainicial, post.fecha_atencion_18%}" class="btn">Ver Expediente</a></td>
答案 0 :(得分:0)
url
标记正在传递位置参数,但您的网址需要关键字参数,因此您需要更新模板:
{% url 'consultaexpediente'
credencial=post.credencial_consultainicial,
fecha=post.fecha_atencion_18 %}
第二个问题是,当您确实需要传递日期时,您传入的是datetime对象。要解决此问题,请先调整您的网址表达式:
r'^expedienteBusqueda/(?P<credencial>\w+)/(?P<fecha>\d{8})$'
现在你需要传递日期。我已将网址格式设置为8位数,因此您的日期应为20130913(今天为止)。这应该在您的网址标记中修复:
{% url 'consultaexpediente'
credencial=post.credencial_consultainicial,
fecha=post.fecha_atencion_18|date:"Ymd" %}
现在正确传递了日期,我们需要修复您的视图代码:
@login_required(login_url='/InicieSesion')
def Expediente_Detalle(request, credencial, fecha):
date_for_search = datetime.datetime.strptime(fecha, '%Y%m%d').date()
formulario = get_object_or_404(ExpedienteConsultaInicial,
credencial_consultainicial=credencial,
fecha_atencion_18=date_for_search)
detalle = formulario.consultascubsecuentes_set.all()
return render(request,
'ExpedienteDetalle.html',
{'formulario': formulario, 'detalle':detalle})