2016-04-04 9 views
0

Django 1.8で作業していて、プロジェクト用の簡単なフィードを作成しようとしています。ここでは、フィードを作成するfeeds.pyファイルは次のとおりです。Django Feed error: 'function'オブジェクトに 'startswith'という属性がありません。

from django.contrib.syndication.views import Feed 
from django.template.defaultfilters import truncatewords 
from valueFact.models import ValueFactPost 


class LatestPostsFeed(Feed): 
    title = "Contributions from members" 
    link = "/companies/" 
    description = "New Contributions by members" 

    def items(self): 
     return ValueFactPost.published.all()[:5] 

    def item_title(self, item): 
     return item.title 

    def item_description(self, item): 
     return truncatewords(item.body, 30) 

マイアプリのurl.pyファイルは、次のとおりです。私は、URL「企業/フィード」にブラウザに指示

from django.conf.urls import url 

from valueFact import views 
from valueFact.feeds import LatestPostsFeed 


urlpatterns = [ 
    url(r'^$', 
     views.valueFactListView.as_view(), 
     name='valueFact_list'), 
    url(r'^(?P<year>\d{4})/(?P<post>[-\w]+)/$', 
     views.valuefact_detail, 
     name='valuefact_detail'), 
    url(r'^(?P<fact_id>\d+)/share/$', 
     views.valuefact_share, 
     name='valuefact_share'), 
    url(r'^feed/$', LatestPostsFeed(), name='post_feed'), 
] 

、および次のエラーが発生します。私は既にこのプロジェクトのすべてのURLをメインプロジェクトのurl confファイルに含めてあり、正常に動作していることに注意してください(例えば、127.0.0.1:8000/companiesと入力したときに必要なページが表示されます)

編集:完全なトレースです

Environment:

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

Django Version: 1.8 Python Version: 3.5.0 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.sites', 'django.contrib.sitemaps', 'djangobower', 'rest_framework', 'stockData', 'accounts', 'functional_tests', 'valueFact') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.security.SecurityMiddleware')

Traceback: File "/Users/djunh/Programming/viex/virtualenv/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/Users/djunh/Programming/viex/virtualenv/lib/python3.5/site-packages/django/contrib/syndication/views.py" in call 43. feedgen = self.get_feed(obj, request) File "/Users/djunh/Programming/viex/virtualenv/lib/python3.5/site-packages/django/contrib/syndication/views.py" in get_feed 174. request.is_secure(), File "/Users/djunh/Programming/viex/virtualenv/lib/python3.5/site-packages/django/contrib/syndication/views.py" in add_domain 19. if url.startswith('//'):

Exception Type: AttributeError at /companies/feed/ Exception Value: 'function' object has no attribute 'startswith'

ありがとうございます!

+4

の完全なスタックトレースを含めるようにあなたの質問を編集してくださいエラー。 –

+0

'item.body'関数とは何ですか? 'item.body()'やこれに類するものを使いたかったようですね。あるいは、それは財産であると思われていましたが、あなたは '@ property'を忘れましたか?それはあなたが私たちに示したスニペットから控除できる唯一のものです。 – freakish

+0

item.bodyは私が作成したポストモデルの本文テキストです(ValueFactPostと呼ばれます)。さらに、モデルにはタイトルがあります。しかし、これらは私のアプリケーションで正しく動作しており、問題なくそれらにアクセスできます。フィギュアドレスは、ポストからモデルを除外しています。 – djunh1

答えて

0

あなたのモデルにget_absolute_url(self)を定義しない場合は、docsからitem_link

# item_link is only needed if NewsItem has no get_absolute_url method. 
def item_link(self, item): 
    return reverse('news-item', args=[item.pk]) 

を定義する必要があるかもしれません:

To specify the contents of <link> , you have two options. For each item in items(), Django first tries calling the item_link() method on the Feed class. In a similar way to the title and description, it is passed it a single parameter, item. If that method doesn’t exist, Django tries executing a get_absolute_url() method on that object. Both get_absolute_url() and item_link() should return the item’s URL as a normal Python string. As with get_absolute_url(), the result of item_link() will be included directly in the URL, so you are responsible for doing all necessary URL quoting and conversion to ASCII inside the method itself.

関連する問題