简单的留言簿 django:__init__() 接受 1 个位置参数,但给出了 2 个

Posted

技术标签:

【中文标题】简单的留言簿 django:__init__() 接受 1 个位置参数,但给出了 2 个【英文标题】:Simple guestbook django: __init__() takes 1 positional argument but 2 were given 【发布时间】:2014-03-02 10:51:51 【问题描述】:

我是 Django 新手,正在尝试制作一个简单的留言簿应用程序来适应环境。我收到以下错误,但我找不到错误:

异常值:_init_() 接受 1 个位置参数,但给出了 2 个。

from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin

class Bericht(models.Model):
    titel = models.CharField(max_length=50)
    auteur = models.ForeignKey(User, blank=True)
    email = models.EmailField(max_length=75)
    inhoud = models.TextField(max_length=10000, blank=True)
    datum = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return str(self.auteur) + " : " + str(self.titel)

    class Meta:
        verbose_name_plural = "berichten"

class BerichtAdmin(admin.ModelAdmin):
    list_display = ["auteur", "datum", "titel"]
    list_filter = ["datum", "auteur"]

admin.site.register(Bericht, BerichtAdmin)

景色

from django.shortcuts import render
from django.views.generic import ListView
from Gastenboek.models import *

class BerichtListView(ListView):
    model = Bericht.objects.all()
    template_name = 'template/bericht_lijst.html'
    paginate_by = 10
    context_object_name = "bericht_lijst"
# Create your views here.

urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'Niels.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    (r"^(\d+)/$", 'Gastenboek.views.BerichtListView'),
    (r"", 'Gastenboek.views.BerichtListView'),
)

追溯

Environment:


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

Django Version: 1.6.1
Python Version: 3.3.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'Gastenboek')
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')


Traceback:
File "C:\Python33\lib\site-packages\django\core\handlers\base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

Exception Type: TypeError at /
Exception Value: __init__() takes 1 positional argument but 2 were given

【问题讨论】:

在此处粘贴完整错误消息。 我认为你的问题来自 model = Bericht.objects.all() ,应该是 model = Bericht 或者你的网址没有添加 .as_view() 问题不在于您在此处显示的任何代码。你应该总是粘贴完整的回溯。我怀疑问题出在您的 urls.py 中。 看看:***.com/questions/16835651/typeerror-for-init/… 问题可能非常相似。 谢谢大家,我按要求更新了一些信息。 【参考方案1】:

在你的 urls.py 中:

你缺少 .as_view()

改成:

(r"^(\d+)/$", Gastenboek.views.BerichtListView.as_view()),
(r"", Gastenboek.views.BerichtListView.as_view()),

【讨论】:

现在我收到一条错误消息,提示未定义 Gastenboek 当我这样做时: from Gastenboek import * ,它说没有名为 site 的模块。 你不应该使用通配符...尝试 import Gastenboek.views.BerichtListView @Alvaro,你帮我省了很多麻烦,谢谢! @GED125 很高兴这仍然有用:)

以上是关于简单的留言簿 django:__init__() 接受 1 个位置参数,但给出了 2 个的主要内容,如果未能解决你的问题,请参考以下文章

Django项目流程简单版

覆盖 Django 模型 __init__ 方法

Django ModelForm 覆盖 __init__

Django __init__() 得到了一个意外的关键字参数“用户”

为啥 Django 应用程序需要 `manage.py` 而不是使用 `__init__ py`?

如何创建一个Django网站