Django - 变量值,TypeError

时间:2017-11-22 16:54:43

标签: python django

我创建了一个这样的标签:

@register.inclusion_tag('post/comment_block.html')
def limit_amount_in_a_page(page_nr=1, post_id=1, amount=5):
    starting_index = page_nr*amount
    for index in range(starting_index, starting_index + amount):
        dosomething()
    has_prev = (page_nr != 0)
    has_next = ((page_nr + 1) * amount) < comments.count()

    return {
        something
    }

问题是:page_nr始终不是int。

这就是我调用标签并将值分配给标签中的page_nr的方法:

{% limit_amount_in_a_page page_nr=my_page_nr post_id=post.id amount=4 %}

这是my_page_nr的值来自:

def to_post_page(request, post_id, page_nr):
    post = get_object_or_404(Post, id=post_id)
    form = CommentForm()
    comments = Comment.objects.filter(pk=post_id)
    return render(request, 'post/posts.html', {
        'post': post,
        'form': form,
        'comments': comments,
        'my_page_nr': page_nr,
    })

这是调用视图的网址:

url(r'^(?P<post_id>[0-9]+)/(?P<page_nr>[0-9]+)/$', views.to_post_page, name="post"),


{% for post in my_posts %}
            <li><a href="{% url 'forum:post' post.id 0 %} ">{{post.title}}</a></li>
{% endfor %}

传递给此url标记的值应为int。如你所见,我通过了0。 真的很感激任何帮助!

1 个答案:

答案 0 :(得分:1)

page_nr的值是从URL中提取的,因此是一个字符串。如果你需要它是一个int,转换它很简单 - 你可以在视图中执行此操作,例如:

return render(request, 'post/posts.html', {
    'post': post,
    'form': form,
    'comments': comments,
    'my_page_nr': int(page_nr),
})