2015-10-10 31 views
2

我嘗試做,使用django 1.6的項目。但下面的代碼行5傳遞錯誤。沒有那一行每件事情都很好。我是新的程序員。期待一些專家的幫助。DijanError模板渲染期間Dijango 1.6

1 {% extends "base.html" %} 
2 
3 {% block content %} 
4  {% for post in posts_list %} 
5   <h2><a href="{% url post slug=post.slug %}">{{ post.title }}</a></h2> 
6   <p>{{ post.body|truncatewords:20 }}</p> 
7   <p> 
8   {{ post.created_at }} | 
9   {% with total=post.comments|length %} 
10    {{ total }} comment{{ total|pluralize }} 
11   {% endwith %} 
12  </p> 
13  {% endfor %} 
14 {% endblock %} 

urls.py

from django.conf.urls import patterns, include, url 
from django.views.generic import ListView, DetailView 
from .models import Post 

urlpatterns = patterns('', 
    url(r'^$', ListView.as_view(
     queryset=Post.objects.all(), 
     context_object_name="posts_list"), 
     name="home" 
    ), 
    url(r'^post/(?P<slug>[a-zA-Z0-9-]+)/$', DetailView.as_view(
     queryset=Post.objects.all(), 
     context_object_name="post"), 
     name="post" 
    ), 
) 

Models.py

from django.db import models 

# Create your models here. 

from django.core.urlresolvers import reverse 

from djangotoolbox.fields import ListField, EmbeddedModelField 


class Post(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True, db_index=True) 
    title = models.CharField(max_length=255) 
    slug = models.SlugField() 
    body = models.TextField() 
    comments = ListField(EmbeddedModelField('Comment'), editable=False) 

    def get_absolute_url(self): 
     return reverse('post', kwargs={"slug": self.slug}) 

    def __unicode__(self): 
     return self.title 

    class Meta: 
     ordering = ["-created_at"] 


class Comment(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True) 
    body = models.TextField(verbose_name="Comment") 
    author = models.CharField(verbose_name="Name", max_length=255) 

如果你願意,我會提供進一步的細節。

===============完整追蹤============================= ============

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/ 

Django Version: 1.6.11 
Python Version: 2.7.6 
Installed Applications: 
('django_mongodb_engine', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'marcador') 
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 /home/umayanga/Desktop/mongoProject/test2/marcador/templates/marcador/post_list.html, error at line 5 
    coercing to Unicode: need string or buffer, Post found 
    1 : {% extends "base.html" %} 


    2 : 


    3 : {% block content %} 


    4 :  {% for post in posts_list %} 


    5 :  <h2><a href=" {% url post slug=post.slug %} ">{{ post.title }}</a></h2> 


    6 :  <p>{{ post.body|truncatewords:20 }}</p> 


    7 :  <p> 


    8 :   {{ post.created_at }} | 


    9 :   {% with total=post.comments|length %} 


    10 :    {{ total }} comment{{ total|pluralize }} 


    11 :   {% endwith %} 


    12 :  </p> 


    13 :  {% endfor %} 


    14 : {% endblock %} 

Traceback: 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    137.     response = response.render() 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/response.py" in render 
    105.    self.content = self.rendered_content 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/response.py" in rendered_content 
    82.   content = template.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in render 
    140.    return self._render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in render 
    840.     bit = self.render_node(node, context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    78.    return node.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
    123.   return compiled_parent._render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in render 
    840.     bit = self.render_node(node, context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    78.    return node.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
    62.    result = block.nodelist.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/base.py" in render 
    840.     bit = self.render_node(node, context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    78.    return node.render(context) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
    196.       nodelist.append(node.render(context)) 
File "/home/umayanga/Desktop/mongoProject/myprojec/local/lib/python2.7/site-packages/django/template/defaulttags.py" in render 
    439.      url = reverse(project_name + '.' + view_name, 

Exception Type: TypeError at/
Exception Value: coercing to Unicode: need string or buffer, Post found 
+0

請發佈完整的回溯。 –

+0

@RahulGupta,我想你會想到,我加了一個問題。 – uma

回答

6

顯然,你錯過了把post的報價在{% url post slug=post.slug %}

當你{% url post slug=post.slug %}post傳遞的值是在模板中for環路Post對象,而不是用名字post的URL。這可以通過錯誤coercing to Unicode: need string or buffer, Post found找到,其中提到找到了Post對象。

要解決您的問題,您需要在url標記中使用圍繞post的引號,以便它使用具有反向名稱的url作爲'post'

{% url 'post' slug=post.slug %} 
+0

非常感謝。我也贊成你的答案。 :-)。這對我的理解非常有幫助。請,你知道任何文章,請閱讀,請把我的鏈接。 – uma

+1

@uma您可以查看官方SO django標籤[info page](http://stackoverflow.com/tags/django/info)中提到的資源和書籍。 –

4

嘗試改變這一點:

<h2><a href="{% url post slug=post.slug %}">{{ post.title }}</a></h2> 

要:

<h2><a href="{% url 'post' slug=post.slug %}">{{ post.title }}</a></h2> 

Template error: In template /home/umayanga/Desktop/mongoProject/test2/marcador/templates/marcador/post_list.html, error at line 5 coercing to Unicode: need string or buffer, Post found

的問題,他期待一個命名空間URL: docs,
並且您傳遞的是POST對象而不是'post'命名空間。

+0

,謝謝。我這樣做,但錯誤是一樣的。 – uma

+0

編輯,我認爲問題是在url命名空間 –

+1

@PauloPessoa你是對的。看來OP已經錯過了在導致使用for循環的'post'對象的url標籤中'post'的引號。更新我的答案。 –