首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django Feed错误:“function”对象没有属性'startswith‘

Django Feed错误:“function”对象没有属性'startswith‘
EN

Stack Overflow用户
提问于 2016-04-04 13:10:05
回答 1查看 1.4K关注 0票数 1

我正在使用Django 1.8,并试图为我的项目创建一个简单的提要。下面是创建提要的feeds.py文件:

代码语言:javascript
运行
复制
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文件如下:

代码语言:javascript
运行
复制
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 'companies/feed',并得到以下错误。注意,我已经在主项目url conf文件中包含了所有这些应用程序url,并且它正常工作(例如,当我键入127.0.0.1:8000/companies时,我得到了我想要的页面)。

编辑:这是完整的跟踪

代码语言:javascript
运行
复制
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'

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2016-09-15 12:32:20

如果没有在模型上定义get_absolute_url(self),则可能需要定义item_link

代码语言:javascript
运行
复制
# 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])

来自文档

要指定<link>的内容,您有两个选项。对于 item ()中的每个项,Django首先尝试调用Feed类上的item_link()方法。它以类似于标题和描述的方式传递给它一个参数,item。如果该方法不存在,Django将尝试在该对象上执行get_absolute_url()方法。get_absolute_url()item_link()都应该将项的URL作为普通的Python返回。与get_absolute_url(),一样,item_link()的结果将直接包含在URL中,因此您负责在方法本身内执行所有必要的URL引用和转换到ASCII。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36403632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档