使用Django为模板菜单制作自定义URL

时间:2015-02-11 22:57:48

标签: python django django-templates

我的想法是在我的案例中使用我的观点地址hikes.views.displayHike并从我的数据库中传递不同的id号,以便在模板中有一个for循环生成的链接列表。如果我这样做:

{%block content%}   
    {% for x in data %}
        <a href="{%url hikes.views.displayHike x.hikeId:{{x.hikeId}}%}"> {{x.name}}</a>
    {% endfor %}
{%endblock%}

{%block content%}   
    {% for x in data %}
        <a href="{%url 'hikes.views.displayHike' {{x.hikeId}}%}"> {{x.name}}</a>
    {% endfor %}
{%endblock%}

上述两种观点都很简单:

def hikeHome(request):
    data = Hikes.objects.all()       
    return render(request, 'hikeHome.html', {'data':data})

我收到语法错误:

Django Version: 1.7
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: ':{{x.hikeId}}' from 'x.hikeId:{{x.hikeId}}'

但是如果我硬编码这样的值:

{%block content%}   
    {% for x in data %}
        <a href="{%url 'hikes.views.displayHike' 1 %}"> {{x.name}}</a>
    {% endfor %}
{%endblock%}

它工作得很好,但我不希望有一个硬编码值......我希望能够将它放在for循环中让它运行并显示用户的所有可能链接。

我还尝试在视图中创建URL,将其放入字典中并将名称作为键访问,将值作为URL访问,如下所示:

视图:

def hikeHome(request):
    hikes = Hikes.objects.all()    
    data = dict()
    for x in hikes:
        data[x.name] = reverse(displayHike,args=[1])

    return render(request, 'hikeHome.html', {'data':data})

模板:

{%block content%}   
    {% for x, y in data.items %}
        <a href="{%url {{y}}%}"> {{x}}</a>
    {% endfor %}
{%endblock%}`

这会收到错误消息:

Django Version: 1.7
Exception Type: TemplateSyntaxError
Exception Value:    
Could not parse the remainder: '{{y}}' from '{{y}}'

1 个答案:

答案 0 :(得分:2)

阅读文档 - https://docs.djangoproject.com/en/1.7/ref/templates/builtins/

{% block content %}
    {% for x in data %}
        <a href="{%url 'hikes.views.displayHike' x.hikeId %}"> {{x.name}}</a>
    {% endfor %}
{% endblock content %}

应该做的伎俩。