0

私は数日間、Djangoでビュー/URLを設定するのに苦労してきました。頭を悩ませるのに苦労している人は、少し違ったやり方をしているようです。

私が達成したいのは:

たとえば、mysite.com / blog /にあるサイトにニュース投稿を投稿できるブログが欲しいのですが、クリックして投稿を個別に表示し、各投稿からスラッグを引き出します。(これはほとんど機能します)。

ただし、ブログアプリから投稿をプルしたいのでホームページです。したがって、最新の投稿のスニペットを表示できます。これで、アプリフォルダーの外とメインディレクトリにビューとURLを作成する必要があることがわかりました。しかし、私はそれらを一緒にリンクさせるのに苦労しています。現在、上記のエラーメッセージが表示されています。「指定されたクエリに一致するブログはありません。」これが、URL、モデル、および2つの異なるビューフォルダーのコードです。

//URLS for app and main directory

import authority
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.defaults import url, include, patterns
from django.contrib import admin

admin.autodiscover()
authority.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    (r'^authority/', include('authority.urls')),
    (r'^i18n/', include('django.conf.urls.i18n')),
    (r'^admin/', include(admin.site.urls)),

    url(r'^$', 'views.blog', name='index'),
    url(r'^blog/(?P<slug>[-\w]+)/$', 'blog.views.blog', name="blog"),
    url(r'^blog/$', 'blog.views.blog_index', name="blog_index"),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        # Trick for Django to support static files (security hole: only for Dev environement! remove this on Prod!!!)
        url(r'^admin/pages/page(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.PAGES_MEDIA_ROOT}),
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
        url(r'^admin_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

urlpatterns += patterns('',      
    (r'^', include('pages.urls')),
    )

//ホームページのメインビュー

  from django.http import HttpResponse
    from django.shortcuts import render_to_response, get_object_or_404
    from django.template import RequestContext

from blog.models import Blog, NewsPost

def blog_index(request):
blogs = Blog.objects.filter(active=True)

return render_to_response('index.html', {
    'blogs':blogs,
}, context_instance=RequestContext(request))

//ブログアプリのビュー

from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext

from blog.models import Blog, NewsPost

def blog_index(request):
    blogs = Blog.objects.filter(active=True)

    return render_to_response('blog/index.html', {
        'blogs':blogs,
    }, context_instance=RequestContext(request))

def blog(request, slug):
    blog = get_object_or_404(Blog, active=True, slug=slug)

    return render_to_response('blog/blog_post.html', {
        'blog': blog
    }, context_instance=RequestContext(request))

//ブログアプリのモデル

from django.contrib.auth.models import User



 class TimeStampedActivate(models.Model):
        created = models.DateTimeField(auto_now_add=True)
        modified = models.DateTimeField(auto_now=True)
        active = models.BooleanField(default=False, help_text="Controls 
        whether or now this news post is live")

    class Meta:
        abstract = True

class Blog(TimeStampedActivate):
    title = models.CharField(max_length=255, help_text="Can be 
    anything up to 255 character")
    slug = models.SlugField()
    description = models.TextField(blank=True, help_text="Give a short 
    description of the news post")
    content = models.TextField(blank=True, help_text="This is the main 
    content for the news post")
    user = models.ForeignKey(User, related_name="blog")

    def __unicode__(self):
        return self.title

    @models.permalink
    def get_absolute_url(self):
        return ('blog', (), {
            'slug': self.slug
        })

class NewsPost(TimeStampedActivate):
    title = models.CharField(max_length=255, help_text="title of the post")
    slug = models.SlugField()
    description = models.TextField(blank=True, help_text="Give a short 
    description of the news post")
    content = models.TextField(blank=True, help_text="This is the main 
    content for the news post")
    publish_at = models.DateTimeField(default=datetime.datetime.now(),
    help_text="Choose when the post is visible")

    blog = models.ForeignKey(Blog, related_name="posts")

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['-publish_at', '-modified', '-created']

これ以上の情報が必要な場合は、お気軽にお問い合わせください!私はこれらすべてに不慣れなので、簡単に行ってください!:) 前もって感謝します!

4

1 に答える 1

1

変化する

url(r'$', blog),

url(r'$', 'views.blog_index', name='index'),

または、別のビューを作成します。

エラーが発生する理由は、タイトルページからblogを期待する関数を実行しようとしているためです。slugあなたがしたいことは、indexをとらないあなたのタイトルページからを表示することですslug

また、次のことがあなたに痛みを引き起こします:

from blog.views import blog_index, blog
from views import blog_index

どちらをblog_index使いたいですか?'views.blog_index'URLに表記を使用することをお勧めします。上記のインポートを削除し、およびの場合と同様に、URLで文字列ベースのビュー名のみを使用してblog/くださいblog_index/

編集:これは、URL全体が表示する必要があるものです(これを機能させるために..)

import authority
from django.conf import settings
from django.conf.urls import patterns, include, url
from django.conf.urls.defaults import url, include, patterns
from django.contrib import admin

admin.autodiscover()
authority.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    (r'^authority/', include('authority.urls')),
    (r'^i18n/', include('django.conf.urls.i18n')),
    (r'^admin/', include(admin.site.urls)),

    url(r'^$', 'views.blog', name='index'),
    url(r'^blog/(?P<slug>[-\w]+)/$', 'blog.views.blog', name="blog"),
    url(r'^blog/$', 'blog.views.blog_index', name="blog_index"),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        # Trick for Django to support static files (security hole: only for Dev environement! remove this on Prod!!!)
        url(r'^admin/pages/page(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.PAGES_MEDIA_ROOT}),
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
        url(r'^admin_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.ADMIN_MEDIA_ROOT}),
    )

urlpatterns += patterns('',      
    (r'^', include('pages.urls')),
    )
于 2012-06-18T22:25:38.227 に答える