美文网首页
django使用mongoengine

django使用mongoengine

作者: Jlan | 来源:发表于2017-03-11 14:35 被阅读2013次

数据库配置

DBNAME = 'Questions'

models

# from django.db import models
from mongoengine import *
from QADoorWebDjango.settings import DBNAME

connect(DBNAME)

# Create your models here.
class Questions(Document):

    _id = IntField(primary_key=True)
    url = URLField()
    title = StringField()
    content = StringField()
    is_solved = BooleanField(default=0)
    answer_count = IntField()
    view_count = StringField()
    vote_count = StringField()
    tags = ListField()
    answers = ListField()
    source = StringField()

    meta = {'collection': 'questions'}  # 指明连接数据库的哪张表

for i in Questions.objects[:10]:  # 测试是否连接成功
    print(i._id)

分页

1. 使用mongoengine自带的分页功能

  • 视图函数
page = request.GET.get('page', 1)
pagination = Questions.objects.paginate(page=page, per_page=PER_PAGE)
return render(request, 'app/index.html', {'questions': pagination.items, 'pagination': pagination})

问题:这里Questions.objects被当成了django orm的QuerySet类型,会提示AttributeError: 'QuerySet' object has no attribute 'paginate',暂时还不知道改怎么解决。

  • 模板
<div class=pagination>
        {% if pagination.has_prev %}
            <li class="waves-effect"><a href="./{{ pagination.prev_num }}" >上一页</a></li>
        {% endif %}

        <li class="active"><strong><a href="">当前页 {{ pagination.page }} of {{ pagination.pages }}.</a></strong></li>

        {% if pagination.has_next %}
            <li class="waves-effect"><a href="./{{ pagination.next_num }}">下一页</a></li>
        {% endif %}
   </div>

2. 使用django的分页功能

  • 视图函数
from django.core.paginator import Paginator
question_list = Questions.objects
page = request.GET.get('page', 1)
paginator = Paginator(question_list, PER_PAGE)
questions = paginator.page(page)
context = {
    'questions': questions,
    'total_pages': paginator.page_range
}
return render(request, 'app/index.html', context)
  • 模板
<ul class="pagination">
    {# 上一页 #}
    {% if questions.has_previous %}
        <li class="waves-effect"><a href="?page={{ questions.previous_page_number }}"><i class="material-icons">chevron_left</i></a></li>
    {% else %}
        <li class="disabled"><a href="#!"><i class="material-icons">chevron_left</i></a></li>
    {% endif %}
    {% for page in total_pages %}
        {% if page %}
            {% ifequal page questions.number %}
                {# 当前页页 #}
                <li class="active"><a>{{ page }}</a></li>
            {% else %}
                {# 指定页 #}
                <li class="waves-effect"><a href="?page={{ page }}">{{ page }}</a></li>
            {% endifequal %}
        {% else %}
            <li class="waves-effect"><a href="#">...</a></li>
        {% endif %}
    {% endfor %}
    {# 下一页 #}
    {% questions.has_next %}
        <li class="waves-effect"><a href="?page={{ questions.next_page_number }}"><i class="material-icons">chevron_right</i></a></li>
    {% else %}
        <li class="disabled"><a href="#!"><i class="material-icons">chevron_right</i></a></li>
    {% endif %}
</ul>

其他问题

1. object._id问题

  • 问题描述

在django模板中使用mongodb对象的_id属性时会提示:Variables and attributes may not begin with underscores: 'value._id'

from django import template
register = template.Library()
@register.filter(name='private')
def private(obj, attribute):
    return getattr(obj, attribute)

在模板中使用

{{ value|private:'_id' }}

参考

相关文章

网友评论

      本文标题:django使用mongoengine

      本文链接:https://www.haomeiwen.com/subject/ejpagttx.html