2016-06-02 5 views
1

私はfiverr.comのクローンをプロジェクトとして作成しています。DjangoのKeyError

私のクリックすると、表示する関連カテゴリのギグだけをフィルタリングする必要があるカテゴリタイトルを持つ私のbase.htmlのヘッダがあります。

何が起こるかは、それが常に家にリダイレクトされることです。私はいくつかのテストを行い、それがKeyErrorのためにあるはずだと信じており、リンクは関数に正しく渡されません。

以下のコード:リンクがされている

views.py

def category(request, link): 

    categories = { 
     "Graphics & Design": "GD", 
     "Digital & Marketing": "DM", 
     "Video & Animation": "VA", 
     "Music & Audio": "MA", 
     "Programming & Tech": "PT" 
    } 
    try: 
     gigs = Gig.objects.filter(category=categories[link]) 
     return render(request, 'home.html', {"gigs": gigs}) 
    except KeyError: 
     return redirect('home') 

models.py

class Gig(models.Model): 
    CATEGORY_CHOICES = (
     ("GD", "Graphics & Design"), 
     ("DM", "Digital & Marketing"), 
     ("VA", "Video & Animation"), 
     ("MA", "Music & Audio"), 
     ("PT", "Programming & Tech") 
) 
    title = models.CharField(max_length=500) 
    category = models.CharField(max_length = 2, choices=CATEGORY_CHOICES) 
    description = models.CharField(max_length=1000) 
    price = models.IntegerField(default=6) 
    photo = models.FileField(upload_to='gigs') 
    status = models.BooleanField(default=True) 
    user = models.ForeignKey(User) 
    create_time = models.DateTimeField(default=timezone.now) 

    def get_absolute_url(self): 
     return reverse('my_gigs') 

    def __str__(self): 
     return self.title 

base.html( - 別の方法を試しましたグラフィックスの同じリンクを取得する&設計が、結果は同様であった)

<nav class="navbar navbar-light bg-faded"> 
    <div class="container"> 
     <ul class="nav navbar-nav"> 
     <li class="nav-item active"> 
      <a class="nav-link" href='category/graphics-design'>Graphics &  Design <span class="sr-only">(current)</span></a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="{% url 'category' 'digital-marketing' %}">Digital Marketing</a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="{% url 'category' 'video-animation' %}">Video & Animation</a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="{% url 'category' 'music-audio' %}">Music & Audio</a> 
     </li> 
     <li class="nav-item"> 
      <a class="nav-link" href="{% url 'category' 'programming-tech' %}">Programming & Tech</a> 
     </li> 
     </ul> 
    </div> 
    </nav> 

urls.py

url(r'^category/(?P<link>[\w|-]+)/$', views.category, name='category'), 
+0

あなたのスクリプトに(リンクして)印刷し、リクエストからリンク値を取得しているかどうかを確認できますか? – Kannaj

+0

こんにちはKunkka、お返事ありがとうございます。 .htmlファイルで{%print(link)%}と{{link}}の両方を実行しましたが、うまく動作しませんでした。私はそれを正しく印刷しているかどうかは分かりません。私はPythonとDjangoにはまだまだ新しいので、実際に例をとっていくうちに私自身がほとんどそれを理解しています。しかし、スタックオーバーフローは本当に役に立ちました。どうもありがとうございます! –

答えて

3

図でlinkパラメータでスラグ値を受信して​​います。だから、あなたはcategories辞書再定義する必要があります。

def category(request, link): 

    categories = { 
    "graphics-design": "GD", 
    "digital-marketing": "DM", 
    "video-animation": "VA", 
    "music-audio": "MA", 
    "programming-tech": "PT" 
    } 
    ... 
+1

こんにちはCartucho、ソリューションのおかげで、それは働いた。それを試みることを教えているはずです...まだ私が行くように学ぶ。どうもありがとう! –

+0

@JimTay心配はいりません!それがあなたを助けることを知ってうれしい。 – Cartucho

1

を入力しているURLとは何ですか?これは、 'link'パラメータがあなたの 'categories'辞書のキーを見つけられなかったためです。このような

何か(あなたのPythonのコマンドラインでそれを試してみてください):あなたのためのアドバイスは、あなたがキャッチしようとしているところで

>>> x = {'name': 'dean'} 
>>> x['xx'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
KeyError: 'xx' 
>>> 

。この構文を使用してエラーを確認してください

import sys 

try: 
    # Code here 
except: 
    # Prints the error and the line that causes the error 
    print ("%s - %s at line: %s" % (sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2].tb_lineno)) 
+1

こんにちはDeanはあなたの提案に感謝します。上記の答えは、実際に問題を解決しました。私はしかし、エラーをキャッチするためのあなたの助言を試してみましょう。私はPythonとDjangoでまだ新しいので、毎日勉強しています。ありがとう! –

+0

こんにちは@JimTay喜んで私は助けることができます –