2014-11-12 2 views
2

Я пытаюсь отменить CreateView в DetailView после того, как загрузил свое изображение.Создать View reverse to DetailView

Я получаю то же сообщение

NoReverseMatch в/фото/изображение/добавить Reverse для «изображения ракурса» с аргументами «()» и именованных аргументов «{» рк «: 50}» не найден , 0 шаблон (ы) попытался: []

Это моя модель для изображения

from django.db import models 
from django.contrib.auth.models import User 
from django.contrib import admin 
from django.conf import settings 
from string import join 
import os 

class Image(models.Model): 
    title = models.CharField(max_length=60, blank=True, null=True) 
    image = models.FileField(upload_to="images/") 
    tags = models.ManyToManyField(Tag, blank=True) 
    albums = models.ManyToManyField(Album, blank=True) 
    created = models.DateTimeField(auto_now_add=True) 
    rating = models.IntegerField(default=50) 
    width = models.IntegerField(blank=True, null=True) 
    height = models.IntegerField(blank=True, null=True) 
    user = models.ForeignKey(User, null=True, blank=True) 


    def __unicode__(self): 
     return self.image.name 

    def size(self): 
      return "%s x %s" % (self.width, self.height) 


    def tags_(self): 
     lst = [x[1] for x in self.tags.values_list()] 
     return str(join(lst, ', ')) 

    def albums_(self): 
     lst = [x[1] for x in self.albums.values_list()] 
     return str(join(lst, ', ')) 

    def thumbnail(self): 
     return """<a href="/media/%s"><img border="0" alt="" src="/media/%s" height="40" /></a>""" % (
                     (self.image.name, self.image.name)) 
     thumbnail.allow_tags = True 

    def get_absolute_url(self,*args,**kwargs): 
     return reverse('image-view',kwargs={'pk': self.pk}) 

Мой urls.py

from django.conf.urls import patterns, url 
from django.conf import settings 
from django.conf.urls.static import static 
from photo import views 


urlpatterns = patterns('', 
    url(r'^image/(?P<pk>\d+)/$', views.ImageView.as_view(),name='image-view',), 
    url(r'^$', views.ListImage.as_view(),name ='Photo-List',), 
    url(r'^image/add/$', views.ImageCreate.as_view(), name = 'create-image',), 
    url(r'update/(?P<pk>\d+)/$', views.ImageUpdate.as_view(),name='image-update',), 

) 

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

мои взгляды

from django.views.generic import ListView, DetailView, UpdateView, CreateView, UpdateView, DeleteView 
from django.core.urlresolvers import reverse_lazy, reverse 
from photo.models import Tag, Image, Album 
from django.conf import settings 

class ImageView(DetailView): 
    model = Image 
    allow_empty = True 
    template_name = 'image.html' 

class ListImage(ListView): 
    #context_object_name = 'object_list' 
    template_name = 'image_list.html' 
    model = Image 
    #def get_queryset(self): 
    # return Image.objects.all() 

class ImageCreate(CreateView): 
    model = Image 
    template_name='image_create.html' 
    fields = ['title','image'] 

Подробнее Подробнее по моей ошибке

Traceback Switch to copy-and-paste view 

/Library/Python/2.7/site-packages/django/core/handlers/base.py in get_response 
        response = wrapped_callback(request, *callback_args, **callback_kwargs) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/base.py in view 
      return self.dispatch(request, *args, **kwargs) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/base.py in dispatch 
     return handler(request, *args, **kwargs) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/edit.py in post 
     return super(BaseCreateView, self).post(request, *args, **kwargs) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/edit.py in post 
      return self.form_valid(form) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/edit.py in form_valid 
     return super(ModelFormMixin, self).form_valid(form) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/views/generic/edit.py in form_valid 
     return HttpResponseRedirect(self.get_success_url()) ... 
▶ Local vars 
/Users/henriaugris/Documents/Django/mysite/photo/views.py in get_success_url 
     return reverse('image-view', kwargs={'pk' : self.object.pk}) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/core/urlresolvers.py in reverse 
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) ... 
▶ Local vars 
/Library/Python/2.7/site-packages/django/core/urlresolvers.py in _reverse_with_prefix 
          (lookup_view_s, args, kwargs, len(patterns), patterns)) ... 
▶ Local vars 
Request information 

GET 
No GET data 
+0

Вы пытались установить переменную успеха на View? – frlan

+1

где находится 'from django.core.urlresolvers import reverse' в ваших моделях? – madzohan

+0

Madzohan: его на мой взгляд –

ответ

1

Вместо установки get_absolute_url в файле models.py как:

def get_absolute_url(self,*args,**kwargs): 
     return reverse('image-view',kwargs={'pk': self.pk}) 

Вы можете установить его в файле views.py под:

class ImageCreate(CreateView): 
    model = Image 
    template_name='image_create.html' 
    fields = ['title','image'] 
    def get_success_url(self): 
     return reverse('image-view', kwargs={'pk' : self.object.pk}) 

    def get_form_kwargs(self, *args, **kwargs): 
     kwargs = super(ImageCreate, self).get_form_kwargs(
      *args, **kwargs) 
     return kwargs 

После внесения этого изменения должен удалить get_absolute_url из файла models.py. С этим изменением вы должны приземлиться на подробный вид загруженного вами изображения при успешном создании нового изображения.

+0

https://github.com/django/django/blob/master/django/views/generic/edit .py # L156-L169 то же самое – madzohan

+0

и что вы имели в виду, переопределив 'get_form_kwargs', но не использовали его? – madzohan

+0

Я буду reupdate мой проект github tonight, благодаря вашему терпению. Я просто прокомментировал get_form_kwars для отладки первой части. –