2017-04-22 67 views
-3

urls.py「找不到網頁(404)」 的後續,當點擊或取消關注按鈕

"""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 MyUser 

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'] = MyUser.objects.all() 
     context['me'] = User.objects.get(username=self.request.user) 
     context['notme'] = MyUser.objects.filter(follow__username=self.request.user) 
     context['notfollow'] = MyUser.objects.filter(~Q(follow__username=self.request.user)) 
     return context 

class AddFollow(View): 
    def get(self,request, id): 
     me=models.MyUser.objects.get(username=request.user) 
     followed = models.MyUser.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.MyUser.objects.get(username=request.user) #instancia del usuario con el id que quiero crear 
     followed = models.MyUser.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() 


class MyUser(models.Model): 
    user = models.ForeignKey(User) 
    username = models.CharField(max_length=200) 
    follow = models.ManyToManyField('self', blank=True) 

    def __unicode__(self): 
     return self.username 

有關。 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> 
</a> 
<tr> 
<td colspan="3"> 
<span> Unfollows </span> 
</td> 
</tr> 


</table> 
</body> 

{% endblock %} 

當運行此代碼我會得到錯誤爲:

「未找到:/約/ add_follow/1 [22 /月/ 2017年7點26分25秒]」 GET /約/ add_follow/1 HTTP/1.1「404 6063」

在終端中。

回答

0

發生這種情況是因爲您使用相對網址創建了關注/取消關注頁面的鏈接。要解決這個問題,你可以將其設爲絕對網址或使用django的網址反向器。

製作的鏈接絕對:

<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> 

利用的url tempalte tag

<td>{{follow}} <a href="{% url 'add_follow' id=user.id %}"> 
    <button>Follow</button></a></td> 
<td>{{follow}} <a href="{% url 'remove_follow' id=user.id %}"> 
    <button>Unfollow</button></a></td> 

閱讀Absolute and Relative urls

+0

通過添加上面的代碼即時得到新的錯誤是」在/ add_follow/1類型錯誤/ __init __()需要1個位置參數,但是2個被賦予「 –

+0

這是發生因爲如果你的網址conf是不正確的。當使用基於類的視圖時,你必須在視圖上調用'.as_view()'。更改網址到'imagec_views.AddFollow.as_view()' – v1k45

+0

爲此我得到錯誤爲「MultipleObjectsReturned at/add_follow/1/ get()返回多個相冊 - 它返回5!」 –