如何在网址中发送日期

时间:2013-09-13 20:13:42

标签: python django url filter

我有这个网址

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>

1 个答案:

答案 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})