如何在自定义模板标记中传递url标记?

时间:2017-01-13 15:28:55

标签: python html django templates django-templates

我正在学习Django构建一个小网站,我发现我有许多模板,我列出了对象,每个模板都有一个链接。 我以为我可以制作一个自定义模板标签,比如

{% object_list some %}

some是字典{'list': obj_list, 'link': link},其中obj_list是我要打印的对象列表,而link应该是指向该项目的某个网址结构。

模板(称为object_list.html)应该看起来像

{% for object in object_list %}
    <li><a href="{% url myapp:object object.id %}">{{object.name}}</a></
{% endfor %}

现在,我的问题是我不知道该在网址中做什么。我希望它具有灵活性,以便&#39; myapp:object&#39;被参数&#39; link&#39;取代,例如,如果对象类型是User,那么我使用{%url myapp:user user.id%}

可以这样做吗?怎么样?

我以

的形式尝试了this solution
{% for object in object_list %}
    {% url 'link' as my_url %}
    <li><a href="{% url my_url object.id %}">{{object.name}}</a></li>
{% endfor %}

'myapp:myobject'作为参数但不起作用。确切地说,在模板中

{% load property_extras %}
{% object_list property_dict %}

其中property_dict是我的参数,templatetag/property_extras.py是保存标记的文件,给出NoReverseMatch错误(如果我使用普通模板 - 没有自定义标记 - 它工作正常)。

有关详细信息,我的模板标记为

@register.inclusion_tag('properties/object_list.html')
def object_list(object_dict):
    print(object_dict['list'])
    print(object_dict['link'])
    return {
        'object_list': object_dict['list'],
        'link': object_dict['link'],
        }

2 个答案:

答案 0 :(得分:4)

我相信你可以使用

public object VerifyUser(string userId, string password)
    {
        DBFunctions dbInfo = new DBFunctions();
        bool status = false;
        string verifyUserQry = "SELECT * FROM Employee WHERE UserName = '" + userId + "' AND Password = '" + password + "'";
        DataTable dt = default(DataTable);
        dt = dbInfo.OpenDTConnection(verifyUserQry);
        if (dt.Rows.Count == 1)
        {
            status = true;
        }
        return status;
    }

并完全删除public bool VerifyUser(string userId, string password) { DBFunctions dbInfo = new DBFunctions(); bool status = false; string verifyUserQry = "SELECT * FROM Employee WHERE UserName = '" + userId + "' AND Password = '" + password + "'"; DataTable dt = default(DataTable); dt = dbInfo.OpenDTConnection(verifyUserQry); if (dt.Rows.Count == 1) { 的使用情况。为您的模型定义方法{% for object in object_list %} <li><a href="{{ object.get_absolute_url }}">{{object.name}}</a></li> {% endfor %} 是根据documentation解决问题的推荐方法。

答案 1 :(得分:2)

使用{% url 'link' as my_url %}不起作用,因为您使用的是文字字符串'link',并且您没有包含对象ID。你的意思是:

{% url link object.id as my_url %}

目前尚不清楚将结果保存到my_url的原因,因为您未在任何地方使用my_url。也许你想要下一行:

<a href="{{ my_url }}">{{object.name}}</a></li>

但是,我认为你真的不需要as my_url。它默默地吞下你可能不想要的错误。这样做会更简单:

<a href="{% url link object.id as my_url %}">{{object.name}}</a></li>