我在 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);
});
});
});
那么有人可以帮我一把吗?非常感谢你!
答案 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
命名为list
或set
token
。