加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Django抛出TypeError:_wrapped_view()缺少1个必需的

发布时间:2020-12-20 12:33:03 所属栏目:Python 来源:网络整理
导读:有人可以帮我修复这个错误:_wrapped_view()缺少1个必要的位置参数:’request’?我仍在学习.我甚至不知道错误意味着什么,除了我错过了某个地方的请求. 如果它有帮助,我想要做的是创建一个ModelForm,允许用户在登录后向网站添加内容. 任何有关我所做错事的
有人可以帮我修复这个错误:_wrapped_view()缺少1个必要的位置参数:’request’?我仍在学习.我甚至不知道错误意味着什么,除了我错过了某个地方的请求.

如果它有帮助,我想要做的是创建一个ModelForm,允许用户在登录后向网站添加内容.

任何有关我所做错事的帮助和解释都将不胜感激.先感谢您.

这是我的模特:

from django.db import models
from cloudinary.models import CloudinaryField

import numpy as np


class Model(models.Model):
    name = models.CharField(max_length=200)
    instagram = models.CharField(max_length=200,default='')
    twitter = models.CharField(max_length=200,default='')
    pinterest = models.CharField(max_length=200,default='')
    snapchat = models.CharField(max_length=200,default='')
    likes = models.IntegerField(default=0)
    views = models.IntegerField(default=0)

    def average_rating(self):
        all_ratings = map(lambda x: x.rating,self.review_set.all())
        return  np.mean(all_ratings)

    def __str__(self):
        return self.name

class Review(models.Model):
    RATING_CHOICES = (
    (1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5'),(6,'6'),(7,'7'),(8,'8'),(9,'9'),(10,'10'),)
    model = models.ForeignKey(Model)
    pub_date = models.DateTimeField('date published')
    user_name =  models.CharField(max_length=100)
    comment = models.CharField(max_length=200)
    rating = models.IntegerField(choices=RATING_CHOICES)

class Index(models.Model):
    model = models.ForeignKey(Model)
    review = models.ForeignKey(Review)

    class Meta:
        verbose_name = 'index'
        verbose_name_plural = 'indices'

浏览次数:

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from cloudinary.forms import cl_init_js_callbacks      

from .models import Review,Model,Index
from .forms import ReviewForm,ModelAddForm
import datetime

from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

from django.template import RequestContext

def index(request):
    context = RequestContext(request)
    model_list = Model.objects.order_by('-likes')
    context_dict = {'models': model_list}
    return render(request,'reviews/index.html',context_dict,context)

def review_list(request):
    latest_review_list = Review.objects.order_by('-pub_date')[:9]
    context = {'latest_review_list':latest_review_list}
    return render(request,'reviews/review_list.html',context)

def review_detail(request,review_id):
    review = get_object_or_404(Review,pk=review_id)
    return render(request,'reviews/review_detail.html',{'review': review})

def model_list(request):
    model_list = Model.objects.order_by('-name')
    context = {'model_list':model_list}
    return render(request,'reviews/model_list.html',context)

def model_detail(request,model_id):
    model = get_object_or_404(Model,pk=model_id)
    return render(request,'reviews/model_detail.html',{'model': model})

@login_required
def add_review(request,model_id):
    if request.method == 'POST':
        form = ReviewForm(request.POST)
        if form.is_valid():
            rating = form.cleaned_data['rating']
            comment = form.cleaned_data['comment']
            user_name = form.cleaned_data['user_name']
            user_name = request.user.username
            review = Review()
            review.model = model
            review.user_name = user_name
            review.rating = rating 
            review.pub_date = datetime.datetime.now()
            review.save()
            # Always return an HttpResponseRedirect after successfully dealing
            # with POST data. This prevents data from being posted twice if a
            # user hits the Back button.
            return HttpResponseRedirect('reviews:model_detail',args=(model.id,))

        else:
            form = ReviewForm()

        return render(request,{'form': form})

@method_decorator(login_required)
def add_model(request):

    if request.method == 'POST':
        form = ModelAddForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            likes = form.cleaned_data['likes']
            views = form.cleaned_data['views']
            instagram = form.cleaned_data['instagram']
            twitter = form.cleaned_data['twitter']
            snapchat = form.cleaned_data['snapchat']
            pinterest = form.cleaned_data['pinterest']

            return HttpResponseRedirect('reviews:model_review')

    else:
            form = ModelAddForm

    return render(request,'reviews/add_model_detail.html',{'form': form})

def user_review_list(request,username=None):
    if not username:
        username = request.user.username
    latest_review_list = Review.objects.filter(user_name=username).order_by('-pub_date')
    context = {'latest_review_list':latest_review_list,'username':username}
    return render(request,'reviews/user_review_list.html',context)

def upload(request):
    context = dict( backend_form = PhotoForm())

    if request.method == 'POST':
        form = PhotoForm(request.POST,request.FILES)
        context['posted'] = form.instance
        if form.is_valid():
            form.save()

    return render(request,'upload.html',context)

网址:

from django.conf.urls import url
from django.conf import settings
from django.conf.urls.static import static
from . import views

urlpatterns = [
    url(r'^$',views.review_list,name='review_list'),url(r'^review/(?P<review_id>[0-9]+)/$',views.review_detail,name='review_detail'),url(r'^model/$',views.model_list,name='model_list'),url(r'^model/(?P<model_id>[0-9]+)/$',views.model_detail,name='model_detail'),url(r'^model/(?P<model_id>[0-9]+)/add_review/$',views.add_review,name='add_review'),url(r'^review/user/(?P<username>w+)/$',views.user_review_list,name='user_review_list'),url(r'^review/user/$',url(r'^model/add_model/$',views.add_model,name='add_model'),] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

模板:

{% extends 'review/base.html' %}
{% load static %}
{% load cloudinary %}

{% block content %}
<h1>Add a Category</h1>

        <form id="category_form" method="post">

            {% csrf_token %}

            {{ form }}

            <input type="submit" name="submit" value="Add Model" />
        </form>

{% endblock %}

追溯:

Environment:


    Request Method: GET
    Request URL: http://localhost:8000/reviews/model/add_model/

    Django Version: 1.9.1
    Python Version: 3.5.1
    Installed Applications:
    ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','reviews']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware','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']


Traceback:

    File "C:UsersxxxxxAnaconda3libsite-packagesdjangocorehandlersbase.py" in get_response
      149.                     response = self.process_exception_by_middleware(e,request)

    File "C:UsersxxxxxAnaconda3libsite-packagesdjangocorehandlersbase.py" in get_response
      147.                     response = wrapped_callback(request,*callback_args,**callback_kwargs)

    File "C:UsersxxxxxAnaconda3libsite-packagesdjangoutilsdecorators.py" in _wrapper
      67.             return bound_func(*args,**kwargs)

    Exception Type: TypeError at /reviews/model/add_model/
    Exception Value: _wrapped_view() missing 1 required positional argument: 'request'

编辑:添加缺少的单引号.

我改变了装饰者.但是,我遇到了一个新错误.

追溯:

Environment:


Request Method: GET
Request URL: http://localhost:8000/reviews/model/add_model/

Django Version: 1.9.1
Python Version: 3.5.1
Installed Applications:
['django.contrib.admin','reviews']
Installed Middleware:
['django.middleware.security.SecurityMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:UsersxxxxxDesktopAppsthotstemplatesreviewsadd_model_detail.html,error at line 0
   Reverse for 'model_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['reviews/model/(?P<model_id>[0-9]+)/$']   1 : {% extends 'reviews/base.html' %}
   2 : {% load static %}
   3 : 
   4 : {% block content %}
   5 : <h1>Add a Model</h1>
   6 : 
   7 :         <form id="add_model_form" method="post">
   8 : 
   9 :             {% csrf_token %}
   10 :

追溯:

File "C:UsersxxxxAnaconda3libsite-packagesdjangocoreurlresolvers.py" in reverse
  586.                 extra,resolver = resolver.namespace_dict[ns]

During handling of the above exception ('thots.reviews'),another exception occurred:

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatedefaulttags.py" in render
  507.                               current_app=current_app)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangocoreurlresolvers.py" in reverse
  596.                                          key)

During handling of the above exception ('thots.reviews' is not a registered namespace),another exception occurred:

File "C:UsersxxxxxxAnaconda3libsite-packagesdjangocorehandlersbase.py" in get_response
  149.                     response = self.process_exception_by_middleware(e,request)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangocorehandlersbase.py" in get_response
  147.                     response = wrapped_callback(request,**callback_kwargs)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangocontribauthdecorators.py" in _wrapped_view
  23.                 return view_func(request,*args,**kwargs)

File "C:UsersxxxxxDesktopAppsthotsreviewsviews.py" in add_model
  83.   return render(request,{'form': form})

File "C:UsersxxxxxAnaconda3libsite-packagesdjangoshortcuts.py" in render
  67.             template_name,context,request=request,using=using)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplateloader.py" in render_to_string
  97.         return template.render(context,request)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebackendsdjango.py" in render
  95.             return self.template.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render
  206.                     return self._render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in _render
  197.         return self.nodelist.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render
  988.                 bit = node.render_annotated(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render_annotated
  955.             return self.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplateloader_tags.py" in render
  173.         return compiled_parent._render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in _render
  197.         return self.nodelist.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render
  988.                 bit = node.render_annotated(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render_annotated
  955.             return self.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplateloader_tags.py" in render
  69.                 result = block.nodelist.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render
  988.                 bit = node.render_annotated(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatebase.py" in render_annotated
  955.             return self.render(context)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatedefaulttags.py" in render
  513.                         six.reraise(*exc_info)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangoutilssix.py" in reraise
  686.         raise value

File "C:UsersxxxxxAnaconda3libsite-packagesdjangotemplatedefaulttags.py" in render
  499.             url = reverse(view_name,args=args,kwargs=kwargs,current_app=current_app)

File "C:UsersxxxxxAnaconda3libsite-packagesdjangocoreurlresolvers.py" in reverse
  600.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view,prefix,**kwargs)))

File "C:UsersxxxxxAnaconda3libsite-packagesdjangocoreurlresolvers.py" in _reverse_with_prefix
  508.                              (lookup_view_s,args,kwargs,len(patterns),patterns))

Exception Type: NoReverseMatch at /reviews/model/add_model/
Exception Value: Reverse for 'model_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['reviews/model/(?P<model_id>[0-9]+)/$']

解决方法

将@method_decorator(login_required)更改为@login_required

method_decorator装饰器用于将函数装饰器转换为方法装饰器.

@login_required
def add_review(request,{'form': form})

@login_required
def add_model(request):

    if request.method == 'POST':
        form = ModelAddForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            likes = form.cleaned_data['likes']
            views = form.cleaned_data['views']
            instagram = form.cleaned_data['instagram']
            twitter = form.cleaned_data['twitter']
            snapchat = form.cleaned_data['snapchat']
            pinterest = form.cleaned_data['pinterest']

            return HttpResponseRedirect('reviews:model_review')

    else:
            form = ModelAddForm

    return render(request,{'form': form})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读