【问题标题】:Django comments pagination isnt workingDjango评论分页不起作用
【发布时间】:2014-07-24 02:01:35
【问题描述】:

有一个问题我是 django 新手,有一个问题我无法理解,

有一个观点:

def article(request, article_id = 1, comments_page_number = 1):
    all_comments = Comments.objects.filter(comments_article_id = article_id)
    paginator = Paginator(all_comments, 2)
    comment_form = CommentForm
    args = {}
    args.update(csrf(request))
    args['article'] = Article.objects.get(id = article_id)
    args['comments'] =  paginator.page(comments_page_number)
    args['form'] = comment_form
    args['username'] = auth.get_user(request).username
    return render_to_response('article.html', args)

有一个模板article.html

{% extends 'main.html' %}

{% block article %}
<h4>{{article.article_date}}</h4>
<h2>{{article.article_title}}</h2>
<p> {{article.article_body}}</p>
<hr>

<div class="large-offset-1 large-8 columns">
<p>Комментарии: </p>
{% for comment in comments %}
    <p>{{comment.comments_text}}</p>
    <hr>
{% endfor %}
    {% if username %}
    <form action="/articles/addcomment/{{article.id}}/" method="POST" >
        {% csrf_token %}
        {{form }}
        <input type="submit" class="button" value="Add comment">
    </form>
    {% endif %}
</div>
    <div class="row">
        <div class="large-3 large-offset-5 columns">
            <ul class="pagination">
                {% if comments.has_previous %}
                    <li class="arrow"><a href="/articles/get/{{article.id}}/comments/{{ comments.previous_page_number }}">&laquo;</a></li>
                {% else %}
                    <li class="arrow unavailable"><a href="">&laquo;</a></li>
                {% endif %}
                {% for page in comments.paginator.page_range %}
                    {% if page == comments.number %}
                        <li class="current"><a href="/articles/get/{{article.id}}/comments/{{ page }}/">{{ page }}</a></li>
                    {% else %}
                        <li><a href="/articles/get/{{article.id}}/comments/{{ page }}/">{{ page }}</a></li>
                    {% endif %}
                {% endfor %}
                {% if comments.has_next %}
                    <li class="arrow"><a href="/articles/get/{{article.id}}/comments/{{ comments.next_page_number }}/">&raquo;</a></li>
                {% else %}
                    <li class="arrow unavailable"><a href="">&raquo;</a></li>
                {% endif %}
            </ul>
        </div>
    </div>

{% endblock %}

这是我的文章/urls.py

urlpatterns = patterns('',
    url(r'^articles/get/(?P<article_id>\d+)/$','article.views.article'),
    url(r'^articles/get/(?P<article_id>\d+)/comments/(\d+)/$', 'article.views.article'),
)

之后在我的文章页面上出现了页面分页,但是当我点击第二页时,例如,它只是更改了我的 url,但没有出现新的 cmets,只是旧的。

我应该怎么做才能做到这一点?非常感谢!

【问题讨论】:

  • 我们是在中世纪还是为什么要手动创建 url 而不是使用{% url %} 模板标签? .)
  • 在函数中打印你的变量comments_page_number,看看它并不总是1。如果是这样,请在 url 路由中命名您的第二个参数以匹配此变量名称。
  • @yedpodtrzitko 你真是个天才,我已经在 url 中添加了它,它成功了!谢谢!你对模板 {% url %} 标签怎么说...?
  • ad {% url %} 模板标签:您可以使用它而不是在模板中手动创建网址(请参阅文档 docs.djangoproject.com/en/dev/ref/templates/builtins/#url )。这将帮助你,例如。如果您要更改 urls.py 中的 URL 结构,它不会破坏您在模板中的链接。

标签: django python-2.7 django-templates django-comments django-pagination


【解决方案1】:

您的变量名称comments_page_number 始终使用默认值。在 url 路由中命名您的第二个参数以匹配此变量名称。

【讨论】:

    【解决方案2】:

    你需要:

    url(r'^articles/get/(?P<article_id>\d+)/comments/(?P<comments_page_number>\d+)/$', 'article.views.this_article'),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2021-03-04
      • 2017-10-24
      相关资源
      最近更新 更多