探戈与django第19章 - 添加内联类别建议

时间:2015-09-17 08:34:35

标签: python django

我在 Tango With Django 中遇到了第19章。我只是尝试按照书中显示的“添加内联类别建议”代码。但是当我输入 python 并且什么也没发生时。

这是我的代码

base.html文件

<ul class="nav nav-list">
    <li class="nav-header">Find a Category</li>
    <form>
    <label></label>
    <li><input class="search-query span10" type="text" name="suggestion" value="" id="suggestion" /></li>
    </form>
</ul>

    <div id="cats">
    </div>

views.py

def get_category_list(max_results=0, starts_with=''):
    cat_list = []
    if starts_with:
        cat_list = Category.objects.filter(name__istartswith=starts_with)

    if max_results > 0:
        if len(cat_list) > max_results:
            cat_list = cat_list[:max_results]

    return cat_list



def suggest_category(request):

    cat_list = []
    starts_with = ''
    if request.method == 'GET':
        starts_with = request.GET['suggestion']

    cat_list = get_category_list(8, starts_with)

    return render(request, 'rango/cats.html', {'cat_list': cat_list})

cats.html

{% if cats %}
    <ul class="nav nav-sidebar">
        {% for c in cats %}
            {% if c == act_act %} <li class="active"> {% else %} <li>{% endif %}
                <a href="{% url 'category' c.slug %}">{{ c.name }}</a></li>
        {% endfor %}
{% else %}
        <li><strong>There are no category present.</strong></li>
    </ul>
{% endif %}

js / rango-ajax.js

$(document).ready(function(){

    $('#likes').click(function(){
        var catid;
        catid = $(this).attr("data-catid");
        $.get('/rango/like_category/', {category_id: catid}, function(data){
            $('#like_count').html(data);
            $('#likes').hide();
        });
    });

    $('#suggestion').keyup(function(){
        var query;
        query = $(this).val();
        $.get('/rango/suggest_category/', {suggestion: query}, function(data){
            $('#cats').html(data);
        });
    });
});

那么有人可以帮我一把吗?非常感谢你!

1 个答案:

答案 0 :(得分:2)

你输入了一个拼写错误,这是第一次检查编码时,特别是django模板,因为未绑定的变量不会引发错误。

cats.html

{% if cats %}
    <ul class="nav nav-sidebar">
        {% for c in cats %}
            {% if c == act_act %} <li class="active"> {% else %} <li>{% endif %}
                <a href="{% url 'category' c.slug %}">{{ c.name }}</a></li>
        {% endfor %}
{% else %}
        <li><strong>There are no category present.</strong></li>
    </ul>
{% endif %}

cats应为cat_list。传递给模板的act_act变量没有。

另外,我建议你避免使用小变量名。而不是cats使用categories代替act_act使用active或更好active_category。使用c代替不可读的category。这使得代码更具可读性,不仅因为名称较长,而且因为您不需要认知负荷来将简洁/隐秘的单词翻译成英语。

我使用复数名称,即使是只有s复数的英语单词。这可能听起来容易出错和拼写错误,但实际上它可以,例如给定变量token(而非tok),我将tokens命名为listset token