2017-03-13 9 views
0

データベースのすべての画像が表示される「リスト」ビューを作成したかったのです。Django 1.10 NoReverseMatch - 終了しますが一致しません。

{% extends "base.html" %} 
{% block title %}Your images{% endblock %} 
{% block content %} 
    <ul> 
     {% for picture in images %} 

      <a href="{% url "detail" id=picture.id slug=picture.slug %}"> 
      <img src="{{ picture.image.url }}" class="image-detail"> 
      </a> 

     {% endfor %} 
    </ul> 

{% endblock %} 

そしてリストと詳細のURL: これはテンプレートです

url(r'^list/$', views.image_list, name='list')

ユーザーが画像をクリックする

url(r'^detail/(?P<id>\d+)/(?P<slug>[\w]+)/$',views.image_detail,name='detail')

が、彼はそのページにリダイレクトされなければならない「詳細'ビュー。

def image_detail(request, id, slug): 
    image = get_object_or_404(Image, id=id, slug=slug) 
    return render(request, 
    'images/image/detail.html', 
    {'section': 'images', 
    'image': image}) 

def image_list(request): 
    images = Image.objects.all() 
    return render(request,'images/image/list.html',{'images':images}) 

「detail」ビューには、idとslugという2つの引数があります。 上記のテンプレートでは、それぞれの画像のidとslug(id=picture.id slug=picture.slug)に引数を渡します。 私は、サーバーを実行した後、私は「NoReverseMatch」エラーを得た

、私のウェブサイト上のリストページにアクセスしようとしたとき: 例外値:引数を指定して「詳細」「()」とキーワードのリバース引数 '{' id ':1、' slug ':' django-and-duke '}'が見つかりません。 0個のパターンが試されました:[]

私はシェルを起動し、イメージモデルをインポートしました。実際にそのIDとスラッグを持つイメージがないかどうか確認したいと思いました。

>>> Image.objects.get(id=1,slug='django-and-duke') 
<Image: Django and Duke> 

実際には、要求されたIDとスラッグを持つImageオブジェクトがあります...どうしていますか?

EDIT:イメージモデル:

class Image(models.Model): 

    user = models.ForeignKey(settings.AUTH_USER_MODEL, 
             related_name='images_created') 

    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=200, 
            blank=True) 

    users_like = models.ManyToManyField(settings.AUTH_USER_MODEL, 
            related_name='images_liked', 
            blank=True) 

    image = models.ImageField(upload_to='images',blank=True) 

    description = models.TextField(blank=True) 

    created = models.DateField(auto_now_add=True, db_index=True) 

    objects = models.Manager() # The default manager. 
    published = PublishedManager() # Our custom manager. 

    def __str__(self): 
     return self.title 

    def save(self, *args, **kwargs): 
     if not self.slug: 
      self.slug = slugify(self.title) 
      super(Image, self).save(*args, **kwargs) 

    def get_absolute_url(self): 
     return reverse('images:detail', args=[self.id, self.slug])` 
+0

pyはそれらのパターンですか?それらがメインプロジェクトのurls.pyにない場合は、どのようにそれらを含めるのですか? – Alasdair

+1

このエラーは、そのアイテムが存在しないとは言わず、URLパターンを見つけることができないと言います。 –

+0

あなたのモデルを投稿するには、 'get_absolute_url'メソッドがそこに定義されていますか? –

答えて

2

あなたはnamespacing URLです。

urlpatterns = [ 
    ... 
    url(r'^', include('images.urls', namespace='images')) 
] 

一部編集-思考:あなたが考えられる。このような何かを持っているurls.pyルートで

<a href="{% url 'images:detail' id=picture.id slug=picture.slug %}"> 

:だから、それはそのようなものになるだろう

  1. id=slug={% url %}内の一部は必須ではありません。それは彼らなしで動作します。しかし、明示的暗黙よりも良い、右ですか?

  2. のエラー:Exception Value: Reverse for '<view_name>' with arguments '('arg1', ...)' and keyword arguments '{'key1': kayvalue1, ...}' not found. 0 pattern(s) tried:[]回の99%が(正しい引数または/およびkwargsからで)見出さurl pattern次いで、起こるがnamespaceが欠落しています。ソリューション:{% url 'namespace:view_name' args/kwrags here %}

  3. のエラー時:Exception Value: Reverse for '<view_name>' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried:[]が発生し、その後、url pattern倍の99%がを見つけましたが、引数または/およびkwargsからはを認識されていません。解決策:あなたの宣言/構文をよく確認する

+0

素早くお返事ありがとうございます!よく働く! – ROBlackSnail

関連する問題