Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用模型按标题显示Django上一个和下一个对象_Python_Django_Django Models_Django Templates - Fatal编程技术网

Python 使用模型按标题显示Django上一个和下一个对象

Python 使用模型按标题显示Django上一个和下一个对象,python,django,django-models,django-templates,Python,Django,Django Models,Django Templates,我想根据标题显示上一课和下一课的链接。我试图在我的模型中使用get\u next\u by\u title来实现这一点 如果有更简单的方法,或者有使用自定义get\u next\u或\u prev\u by\u字段的官方文档,请为我指出正确的方向 使用Django 1.6 这是我的模特 class Lesson(models.Model): tutorials = models.ForeignKey('Tutorial', blank=True) title = models.C

我想根据标题显示上一课和下一课的链接。我试图在我的模型中使用
get\u next\u by\u title
来实现这一点

如果有更简单的方法,或者有使用自定义
get\u next\u或\u prev\u by\u字段的官方文档,请为我指出正确的方向

使用Django 1.6

这是我的模特

class Lesson(models.Model):
    tutorials = models.ForeignKey('Tutorial', blank=True)
    title = models.CharField(max_length=65)
    slug = models.SlugField(unique=True)

    def __unicode__(self, ):
        return self.title

    class Meta:
        ordering = 'title',

    def get_absolute_url(self):
        return reverse('lesson', args=[str(self.slug)])

    def get_next_by_title(self):
        try:
            return self._get_next_or_previous_by_FIELD('title', is_next=True)
        except Lesson.DoesNotExist:
            return None

    def get_previous_by_title(self):
        try:
            return self._get_next_or_previous_by_FIELD('title', is_next=False)
        except Lesson.DoesNotExist:
            return None
这是我的模板

   {% with prev_lesson=lesson.get_previous_by_title %}
    {% if prev_lesson %}
      <a class="col-md-6" href="{{ prev_lesson.get_absolute_url }}">&laquo; {{ prev_lesson.title }}</a>
      <div class="col-md-6"></div>
    {% endif %} {% endwith %} {% with next_lesson=lesson.get_next_by_title %}
    {% if next_lesson %}
      <a class="col-md-6" href="{{ next_lesson.get_absolute_url }}">&laquo; {{ next_lesson.title }}</a>
    {% endif %} {% endwith %}
{%with prev_lesson=lesson.get_previous_by_title%}
{%if上一课%}
{%endif%}{%endwith%}{%with next_lesson=lesson.get_next_by_title%}
{%if下一课%}
{%endif%}{%endwith%}
这是请求的完整回溯

Environment:


Request Method: GET
Request URL: /tutorials/lesson/lesson-name/

Django Version: 1.6.2
Python Version: 2.7.6
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'blog',
 'ckeditor',
 'tutorials')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')
Template error:
In template C:\Users\Shaun\Desktop\sg\static\templates\tutorials\lesson.html, error at line 22
   'str' object has no attribute 'attname'
   12 :     {% endif %}


   13 :     {% if lesson.get_next_by_timestamp %}


   14 :         <a class="right" href="{{ lesson.get_next_post.get_absolute_url }}">{{ lesson.get_next_post.title|truncatewords:'4' }} &raquo;</a>


   15 :     {% endif %}


   16 : 


   17 :     <div class='clearfix'></div>


   18 : 


   19 :     <h2>{{ lesson.title|upper }}</h2>


   20 :     <p>{{ lesson.content|safe }}</p>


   21 :     


   22 :     <a class="col-md-6" href=" {{ lesson.get_previous_by_title.get_absolute_url }} " title="{% trans "View previous post" %}">&laquo; {{ lesson.get_previous_by_title.title }}</a>


   23 :   <a class="col-md-6" href="{{ lesson.get_next_by_title.get_absolute_url }}" title="{% trans "View previous post" %}">&laquo; {{ lesson.get_next_by_title.title }}</a>


   24 : 


   25 : {% endblock %}

Traceback:
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\core\handlers\base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Shaun\Desktop\sg\src\tutorials\views.py" in single_lesson
  13.     return render_to_response('tutorials/lesson.html', locals(), context_instance=RequestContext(request))
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\shortcuts\__init__.py" in render_to_response
  29.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\loader.py" in render_to_string
  169.         return t.render(context_instance)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in render
  140.             return self._render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in _render
  134.         return self.nodelist.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in render
  840.                 bit = self.render_node(node, context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\debug.py" in render_node
  78.             return node.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\loader_tags.py" in render
  123.         return compiled_parent._render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in _render
  134.         return self.nodelist.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in render
  840.                 bit = self.render_node(node, context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\debug.py" in render_node
  78.             return node.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\loader_tags.py" in render
  62.             result = block.nodelist.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in render
  840.                 bit = self.render_node(node, context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\debug.py" in render_node
  78.             return node.render(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\debug.py" in render
  88.             output = self.filter_expression.resolve(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in resolve
  585.                 obj = self.var.resolve(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in resolve
  735.             value = self._resolve_lookup(context)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\template\base.py" in _resolve_lookup
  789.                             current = current()
File "C:\Users\Shaun\Desktop\sg\src\tutorials\models.py" in get_previous_by_title
  64.             return self._get_next_or_previous_by_FIELD('title', is_next=False)
File "C:\Users\Shaun\Desktop\sg\lib\site-packages\django\db\models\base.py" in _get_next_or_previous_by_FIELD
  708.         param = force_text(getattr(self, field.attname))

Exception Type: AttributeError at /tutorials/lesson/setting-up-your-django-blog-application/
Exception Value: 'str' object has no attribute 'attname'
环境:
请求方法:获取
请求URL:/教程/课程/课程名称/
Django版本:1.6.2
Python版本:2.7.6
已安装的应用程序:
(“django.contrib.admin”,
“django.contrib.auth”,
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
“博客”,
“编辑”,
“教程”)
已安装的中间件:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.xframeoptions中间件')
模板错误:
在模板C:\Users\Shaun\Desktop\sg\static\templates\tutorials\lesson.html中,第22行出现错误
“str”对象没有属性“attname”
12:{%endif%}
13:{%if lesson.get_next_by_timestamp%}
14 :         
15:{%endif%}
16 : 
17 :     
18 : 
19:{{课程名称|上}}
20:{{lesson.content | safe}

21 : 22 : 23 : 24 : 25:{%endblock%} 回溯: get\U响应中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\core\handlers\base.py” 114响应=包装的回调(请求,*回调参数,**回调参数) 单个课程中的文件“C:\Users\Shaun\Desktop\sg\src\tutorials\views.py” 13返回render_to_response('tutorials/lesson.html',locals(),context_instance=RequestContext(request)) render\u to\u响应中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\shortcuts\\uuuu init\uuuuu.py” 29返回HttpResponse(loader.render_to_string(*args,**kwargs),**HttpResponse_kwargs) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\loader.py”,位于render\u to\u字符串中 169返回t.render(上下文\实例) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 140返回self.\u呈现(上下文) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py”位于\u render中 134返回self.nodelist.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 840bit=self.render_节点(节点,上下文) render\u节点中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\debug.py” 78返回node.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\loader\u tags.py” 123返回编译的\u父对象。\u呈现(上下文) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py”位于\u render中 134返回self.nodelist.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 840bit=self.render_节点(节点,上下文) render\u节点中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\debug.py” 78返回node.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\loader\u tags.py” 62结果=block.nodelist.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 840bit=self.render_节点(节点,上下文) render\u节点中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\debug.py” 78返回node.render(上下文) render中的文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\debug.py” 88输出=self.filter\u expression.resolve(上下文) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 585obj=self.var.resolve(上下文) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py” 735value=self.\u解析\u查找(上下文) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\template\base.py”位于\u resolve\u lookup中 789电流=电流() 文件“C:\Users\Shaun\Desktop\sg\src\tutorials\models.py”位于get\u previous\u by\u标题中 64返回self.\u获取\u下一个\u或\u上一个\u按\u字段('title',is\u next=False) 文件“C:\Users\Shaun\Desktop\sg\lib\site packages\django\db\models\base.py”位于\u get\u next\u或\u previous\u by\u字段中 708param=force_text(getattr(self,field.attname)) 异常类型:AttributeError at/tutorials/lesson/设置django博客应用程序/ 异常值:“str”对象没有属性“attname”
Django datetime字段仅添加
get\u previous\u by
。如果要按标题排序,则必须创建自己的方法。它没有显示任何内容,因为Django模板系统以静默方式失败

Django模型类有一个
\u get\u next\u或\u previous\u by\u字段
,您可以创建以下内容:

class MyModel(models.Model):
    [fields]

    def get_next_by_title(self):
        try:
            return self._get_next_or_previous_by_FIELD('title', is_next=True)
        except MyModel.DoesNotExist:
            return None

    def get_previous_by_title(self):
        try:
            return self._get_next_or_previous_by_FIELD('title', is_next=False)
        except MyModel.DoesNotExist:
            return None
模板:

  <a class="col-md-6" href="{{ lesson.get_previous_by_title.get_absolute_url }}" title="{% trans "View previous post" %}">&laquo; {{ lesson.get_previous_by_title.title }}</a>
  <a class="col-md-6" href="{{ lesson.get_next_by_title.get_absolute_url }}" title="{% trans "View previous post" %}">&laquo; {{ lesson.get_next_by_title.title }}</a>


谢谢您的帮助,但我仍然无法将其显示出来。我将代码更新为现在的代码,你能看一下吗?你不明白,你不必用标题替换字段。在这种情况下,方法实际上被命名为
\u get\u next\u或\u previous\u by\u FIELD
:)我在想lol,我修好了。。再次更新模型和模板