渲染时捕获TypeError:不可用类型:'dict'

时间:2011-02-11 23:14:25

标签: python django

我正在努力使用“实用Django项目”这本书,但这个东西它不起作用。到目前为止你可以找到我的代码here.(没有“链接”类。我刚刚添加了get_absolute_url Entry类,突然间我在渲染时出现了“Caught TypeError:unhashable type:'dict'”尝试访问管理页面时出错。Screenie of what I'm talking about.我从未修改错误中显示的文件中的任何内容:(。我该怎么办?

编辑:添加此内容后发生错误:

def get_absolute_url(self):
    return ('coltrane_entry_detail', (), { 'year': self.pub_date.strftime("%Y"),
                                           'month': self.pub_date.strftime("%b").lower(),
                                           'day': self.pub_date.strftime("%d"),
                                           'slug': self.slug })
get_absolute_url = models.permalink(get_absolute_url)

那是来自urls.py:

urlpatterns = patterns('django.views.generic.date_based',
    (r'^$', 'archive_index', entry_info_dict, 'coltrane_entry_archive_index'),
    (r'^(?P<year>\d{4})/$', 'archive_year', entry_info_dict, 'coltrane_entry_archive_year'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/$', 'archive_month', entry_info_dict, 'coltrane_entry_archive_month'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/$', 'archive_day', entry_info_dict, 'coltrane_entry_archive_day'),
    (r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{2})/?(?P<slug>[-\w]+)/$', 'object_detail', entry_info_dict, 'coltrane_entry_detail'),
)

4 个答案:

答案 0 :(得分:3)

抱歉,您的代码目前尚未加载。

据我所知,您可能正在尝试将dict实例用作dict密钥。 例如,你不能这样做:

a = {'1' : 'one'}
b = {a : 'two'}

答案 1 :(得分:1)

你能告诉我你的URLconf中coltrane_entry_detail url被命名的行吗?至少one old ticket on djangoproject.com表示错误可能是由错误配置的网址格式引起的,如果您刚刚为模型添加了get_absolute_url方法,我猜您可能还添加了命名视图是指?

答案 2 :(得分:0)

您是否使用pip和virtualenv设置了django环境?您的项目具有以下依赖项:

markdown==2.0.3
django-tagging==0.3.1

我已将上述内容放在项目级别的requirements.txt文件中。一旦你安装了pip,virtualenv并为该项目创建了一个独特的环境,你可以安装上面的:

pip install -r requirements.txt

完成上一次设置后,您需要将tagging放入INSTALLED_APPS的{​​{1}}中:

settings.py

删除INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', 'django.contrib.flatpages', 'cms.search', 'coltrane', 'tagging', ) 数据库文件并运行cms.db。您需要为超级用户提供用户名和密码。我的代码运行正常,我可以访问管理员。

答案 3 :(得分:0)

有些时候我们使用HTTPResponse实例而不是render方法


对于前: 在我的情况下

return HttpResponse(request, 'doctor_list.html', {'list': doctor_list})

此删除与

return render(request, 'doctor_list.html', {'list': doctor_list})