django 发布信息后 TypeError at /jyinfo/1 init() takes exactly 1 argument (3 given)? 400 报错
Environment:
Request Method: GET Request URL: http://127.0.0.1:8000/jyinfo/1
Django Version: 1.5.5 Python Version: 2.7.6 Installed Applications: ('django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.admindocs', 'tongzhi') Installed Middleware: ('django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware')
Traceback: File "E:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 115. response = callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /jyinfo/1 Exception Value: init() takes exactly 1 argument (3 given)
django 发布信息后 TypeError at /jyinfo/1 __init__() takes exactly 1 argument (3 given)
附:models.py
#交友 class JiaoYou(models.Model): jycategory = models.ForeignKey(JyCategory, verbose_name=u'交友分类') title = models.CharField(max_length='60') content = models.TextField() user= models.ForeignKey(User) ip = models.IPAddressField() datetimeinfo = models.DateTimeField(auto_now_add=True) clickcount = models.IntegerField(default=0) addr_dz = models.CharField(max_length=50, blank=True) phone_dh = models.CharField(blank=True, max_length='50') qq = models.IntegerField(blank=True, null=True) lxr_user = models.CharField(blank=True, max_length='10') is_top = models.IntegerField(default=0) infopic1 = models.FileField(upload_to='./pic/%Y/%m/%d/%H/', blank=True, null=True) infopic2 = models.FileField(upload_to='./pic/%Y/%m/%d/%H/', blank=True, null=True) infopic3 = models.FileField(upload_to='./pic/%Y/%m/%d/%H/', blank=True, null=True) def __unicode__(self): return u'用户%s发表的标题为%s的交友信息' % (self.user.username, self.title) class Meta: verbose_name_plural = u'交友信息'
#交友信息发布函数 @login_required def jiaoyou_post(request): if request.method == 'POST': form = JiaoYouPostForm(request.POST, request.FILES) if form.is_valid(): newinfo = JiaoYou( title = form.cleaned_data['title'], content = form.cleaned_data['content'], infopic1 = form.cleaned_data['infopic1'], infopic2 = form.cleaned_data['infopic2'], infopic3 = form.cleaned_data['infopic3'], user = request.user, jycategory = form.cleaned_data['jycategory'], addr_dz = form.cleaned_data['addr_dz'], ip = request.META['REMOTE_ADDR'], phone_dh = form.cleaned_data['phone_dh'], qq = form.cleaned_data['qq'], lxr_user = form.cleaned_data['lxr_user'], ) newinfo.save() return HttpResponseRedirect(reverse('jyinfo', args=[newinfo.id])) else: return HttpResponse("你填写的信息有误,请返回修改后重新发布!") else: form = JiaoYouPostForm() variables = RequestContext(request, {'form':form}) return render_to_response('jy/jiaoyou_post.html', variables)
这样发布的信息。可以发布到数据库里面。
但是用DatilView调用展示的时候就出现上面的错误
看出错提示好像是 多传了个参数? 但是实在找不出是哪里出了问题了。
这是views
#交友信息页面 class jyinfo(DetailView): model = JiaoYou template_name = 'jy/jyinfo.html' def get_object(self): object1 = super(jyinfo, self).get_object() object1.clickcount += 1 object1.save() return object1
把urls.py, response返回的代码贴出来看看######
# -*- coding:utf-8 -*- from django.conf.urls import patterns, include, url from django.views.generic import DetailView, ListView, TemplateView from tongzhi.models import * from tongzhi.views import * import os import settings from django.contrib import admin admin.autodiscover() sitemedia1 = os.path.join(os.path.dirname(__file__), '../site_media').replace('\\', '/') urlpatterns = patterns('', # Examples: # url(r'^$', 'tjxxw.views.home', name='home'), # url(r'^tjxxw/', include('tjxxw.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^tz/reg/$', 'tongzhi.views.register_tz'), url(r'^accounts/register/ok/$', 'tongzhi.views.reg_ok'), url(r'^accounts/login/$', 'django.contrib.auth.views.login'), url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}), url(r'^accounts/password/reset/$', 'django.contrib.auth.views.password_reset'), url(r'^accounts/password/reset/done/$', 'django.contrib.auth.views.password_reset_done'), url(r'^password/reset/complete/$', 'django.contrib.auth.views.password_reset_complete', name='auth_password_reset_complete'), url(r'^accounts/change-password/$', 'django.contrib.auth.views.password_change', {'template_name':'registration/password_change.html'}), url(r'^accounts/change-done/$', 'django.contrib.auth.views.password_change_done', {'template_name':'registration/password_change_success.html'}), url(r'^jypost/$', 'tongzhi.views.jiaoyou_post', name='jiaoyou_post'), url(r'^tzpost/$', 'tongzhi.views.tzinfo_post', name='tzinfo_post'), url(r'^staticfiles/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATICFILES_DIRS, 'show_indexes':True}), url(r'^$', 'tongzhi.views.indexlist', name='indexlist'), url(r'^jylist/(?P<pk>\d+)$', 'tongzhi.views.jylist', name='jylist'), url(r'^jyinfo/(?P<pk>\d+)/$', 'tongzhi.views.jyinfo', name='jyinfo'), url(r'^tzlist/(?P<pk>\d+)$', 'tongzhi.views.tzlist', name='tzlist'), url(r'^tzinfo/(?P<pk>\d+).html$', 'tongzhi.views.tzinfo', name='tzinfo'), url(r'^admin/', include(admin.site.urls)), ) if settings.DEBUG: urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.MEDIA_ROOT}), url(r'^img/(?P<path>.*)$', 'django.views.static.serve', {'document_root':settings.STATIC_ROOT}), url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': sitemedia1}), )
urls.py 的这行修改一下试试
url(r'^jyinfo/(?P<pk>\d+)/$', 'tongzhi.views.jyinfo', name='jyinfo'),
修改为
url(r'^jyinfo/(?P<pk>\d+)/$', jyinfo.as_view(), name='jyinfo'),
######多谢...
我就说.哪里有点小问题...
原来是as_views..这里忘了views里用的是通用视图了.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。