2017-04-22 42 views
0

urls.py得到錯誤爲 「類型錯誤在/ add_follow/1/__init __()需要1個位置參數,但是給予2」

"""stratinum URL Configuration 

The `urlpatterns` list routes URLs to views. For more information please see: 
    https://docs.djangoproject.com/en/1.10/topics/http/urls/ 
Examples: 
Function views 
    1. Add an import: from my_app import views 
    2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') 
Class-based views 
    1. Add an import: from other_app.views import Home 
    2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') 
Including another URLconf 
    1. Import the include() function: from django.conf.urls import url, include 
    2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) 
""" 
from django.conf.urls import url, include 
from django.contrib import admin 

from imagec import views as imagec_views 
from contact import views as contact_views 
from django.conf.urls.static import static 
from django.conf import settings 
from django.core.urlresolvers import reverse 


admin.autodiscover() 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', imagec_views.home, name='home'), 
    url(r'^about/$', imagec_views.about, name='about'), 
    url(r'^detail/$', imagec_views.detail, name='detail'), 
    url(r'^profile/$', imagec_views.userProfile, name='profile'), 
    url(r'^create_form/$', imagec_views.create_form, name='create_form'), 
    url(r'^contact/$', contact_views.contact, name='contact'), 
    url(r'^userProfile/$', contact_views.contact, name='userProfile'), 
    url(r'^accounts/', include('allauth.urls')), 
    url('', include('social.apps.django_app.urls', namespace='social')), 
    url('', include('django.contrib.auth.urls', namespace='auth')), 
    url(r'^$', imagec_views.ListaFollow, name="lista_follow"), 
    url(r'^add_follow/(?P<id>\d{1,})/$', imagec_views.AddFollow, name='add_follow'), 
    url(r'^remove_follow/(?P<id>\d{1,})/$', imagec_views.RemoveFollow, name='remove_follow') 

] 
if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

views.py

from django.contrib.auth.decorators import login_required 
from django.shortcuts import render 
from django.conf import settings 
from django.core.files.storage import FileSystemStorage 
from django.core.urlresolvers import reverse 
from django.shortcuts import render, get_object_or_404 
from .forms import AlbumForm 
from .models import Album 


from django.http import HttpResponse,HttpResponseForbidden 

IMAGE_FILE_TYPES = ['png', 'jpg', 'jpeg'] 

# Create your views here. 
def home(request): 
    context = {} 
    template = 'home.html' 
    return render(request, template, context) 

def about(request): 
    context = {} 
    template = 'about.html' 
    return render(request, template, context) 

@login_required() 
def userProfile(request): 
    user = request.user 
    context = {'user': user} 
    template = 'profile.html' 
    return render(request, template, context) 



def create_form(request): 
     form = AlbumForm(request.POST or None, request.FILES or None) 
     if form.is_valid(): 
      album = form.save(commit=False) 
      album.user = request.user 
      album.image= request.FILES['image'] 
      file_type = album.image.url.split('.')[-1] 
      file_type = file_type.lower() 
      if file_type not in IMAGE_FILE_TYPES: 
       context = { 
        'album': album, 
        'form': form, 
        'error_message': 'Image file must be PNG, JPG, or JPEG', 
       } 
       return render(request, 'detail.html', context) 
      album.save() 
      return render(request, 'create_form.html', {'album': album}) 
     context = { 
      "form": form, 
     } 
     return render(request, 'create_form.html', context) 

def detail(request): 
     user = request.user 
     #album = get_object_or_404(Album, pk=id) 
     return render(request, 'detail.html', {'user': user}) 


from django.shortcuts import render, redirect 
from .models import Album 

from django.views.generic import TemplateView,View 
from django.db.models import Q 
from django.core.urlresolvers import reverse 
from . import models 
#from imagec.models import User 
from django.contrib.auth.models import Permission, User 


class ListaFollow(TemplateView): 
    template_name = 'lista_follow.html' 
    def get_context_data(self,**kwargs): 
     context = super(ListaFollow,self).get_context_data(**kwargs) 
     context['all'] = Album.objects.all() 
     context['me'] = User.objects.get(user=self.request.user) 
     context['notme'] = Album.objects.filter(follow__user=self.request.user) 
     context['notfollow'] = Album.objects.filter(~Q(follow__user=self.request.user)) 
     return context 

class AddFollow(View): 
    def get(self,request, id): 
     me=models.Album.objects.get(user=request.user) 
     followed = models.Album.objects.get(id=id) #el wey 
     me.follow.add(followed) 
     return redirect(reverse('imagec/about.html')) 

class RemoveFollow(View): 
    def get(self,request, id): 
     me=models.Album.objects.get(user=request.user) #instancia del usuario con el id que quiero crear 
     followed = models.Album.objects.get(id=id) 
     me.follow.remove(followed) #creo el usuario con mi nombre y la relacion 
     return redirect(reverse('imagec/about.html')) 

models.py

from __future__ import unicode_literals 
from django.contrib.auth.models import Permission, User 

from django.db import models 


# Create your models here. 
class profile(models.Model): 
    name = models.CharField(max_length=120) 
    description = models.TextField(default='description default text') 

    def __unicode__(self): 
     return self.name 


class Album(models.Model): 
    user = models.ForeignKey(User, default=1) 
    image = models.FileField() 
    follow = models.ManyToManyField('self', blank=True) 

    def __unicode__(self): 
     return self.user 

about.html

{% extends 'base.html' %} 

{% block content %} 
<body> 
<div class="container"> 
    <h1>Profile</h1> 
    <p>Username: {{ user }}</p> 
    <p>Email: {{ user.email }}</p> 

      <p><input type="submit" value="Upload"/></p> 

</div> 
<table> 
<tr> 
<th colspan="3"> @ {{ user }}</th> 
</tr> 

<tr> 
<td colspan="3"> 
<span> Follows </span> 
</td> 
</tr> 

<td>{{follow}} <a href="/add_follow/{{user.id}}"> 
    <button>Follow</button></a></td> 
<td>{{follow}} <a href="/remove_follow/{{user.id}}"> 
    <button>Unfollow</button></a></td> 
<tr> 
<td colspan="3"> 
<span> Unfollows </span> 
</td> 
</tr> 


</table> 
</body> 

{% endblock %} 

我m到處爲「類型錯誤在/ add_follow/1/

__init__() takes 1 positional argument but 2 were given當點擊後續或取消關注按鈕,可以爲這個

+0

後回溯爲好。每個類都有一個'__init __()'方法,所以不可能僅僅從異常消息中知道是什麼造成的。 –

回答

1

很難任何人給解決辦法知道什麼是單從異常消息錯誤。但是當您使用基於類的視圖時,您必須調用as_view()函數才能在您的url路由器中使用它們。

https://docs.djangoproject.com/en/1.11/topics/class-based-views/#subclassing-generic-views

因此改變所有的CBV路線(但不功能視圖)在你的urls.py

# BAD 
url(r'^$', imagec_views.ListaFollow, name="lista_follow"), 

# CORRECT 
url(r'^$', imagec_views.ListaFollow.as_view(), name="lista_follow"), 
相關問題