3

私はDjangoを学習している最中であり、現在、Pollsチュートリアルに大まかに従うプロジェクトに取り組んでいます。

今、私は一般的なビューに変換しようとしていますが、ここで問題が発生しています。

news / models.py

[...]
class News(models.Model):
  id = models.IntegerField(primary_key=True, editable=False)
  category = models.CharField(max_length=50L)
  title = models.CharField(max_length=200L)
  #rss_summary = models.CharField(max_length=2000L)
  rss_summary = models.TextField(max_length=2000L)
  #body_text = models.CharField(max_length=5000L)
  body_text = models.TextField(max_length=5000L)
  post_date = models.DateTimeField()
  class Meta:
      db_table = 'news'
  def __unicode__(self):
      return self.title

news / urls.py

from django.conf.urls import patterns, url, include
from django.views.generic import DetailView, ListView

from news import views
from news.models import News

urlpatterns = patterns('',
    url(r'^$',
        ListView.as_view(
            queryset=News.objects.order_by('-post_date'),
            context_object_name='allnews',
            template_name='news/news.html'),
        name='news_index'),
[...]

news / templates / news / news.html

[...]
{% for item in allnews %}
  <h1 class="news"><a href="{% url 'news_index' item.id %}">{{item.title}}</a></h1>
  [...]
{% endfor %}

今私の問題:ListViewDetailView{% url 'foo' id %}などの一般的なビューを使用した構文を使用して(IDを介して)特定のニュースアイテムにリンクしたいと思います。どうすればこれを達成できますか?ListViewの名前を宣言しましたが、を指定する方法がわかりません。allnews.id

上記のコードでエラーが発生します

引数'(7L、)'およびキーワード引数'{}'が見つからない'news_index'の/news/リバースでのNoReverseMatch。

面白いのは、「7L」は最新のニュースアイテムのIDです...

4

2 に答える 2

3

1 つはリスト用、もう 1 つは詳細用の 2 つのビューを持つ必要があるため、リスト ページのアイテム リンクをクリックすると、詳細ビ​​ューとテンプレートが表示されます。

ニュース/urls.py

from django.conf.urls import patterns, url, include
from django.views.generic import DetailView, ListView

from news import views
from news.models import News

urlpatterns = patterns('',
    url(r'^$',
        ListView.as_view(
            queryset=News.objects.order_by('-post_date'),
            context_object_name='allnews',
            template_name='news/news.html'),
        name='news_index'),

    url(r'^(?P<id>\d+)/$',
        DetailView.as_view(
            model=News,
            context_object_name='item',
            template_name='news/news_item.html'),
        name='news_detail'),
[...]

ニュース/テンプレート/ニュース/ニュース.html

[...]
{% for item in allnews %}
  <h1 class="news"><a href="{% url 'news_detail' item.id %}">{{item.title}}</a></h1>
  [...]
{% endfor %}

ニュース/テンプレート/ニュース/news_item.html

<a href="{% url 'news_index' %}">Back</a>

<h1 class="news">{{item.title}}</h1>
<p>{{ item.body_text }}</p>
于 2013-03-18T15:39:15.780 に答える
2

詳細について間違ったビューを使用しています。定義news_indexした はです。ListView実装する必要がありますDetailView。django docsの汎用ビューの Urls の詳細を参照してください。

url(r'^(?P<id>\d+)/$',
        DetailView.as_view(
            model=News,
            template_name='news/detail.html'),
        name='news_detail'),

そしてテンプレで

{% for item in allnews %}
  <h1 class="news"><a href="{% url 'news_detail' item.id %}">{{item.title}}</a></h1>
  [...]
{% endfor %}
于 2013-03-14T10:55:29.157 に答える