2012-06-18 30 views
0

我一直在Django中設置views/url幾天努力。掙扎着讓我的頭腦看起來每個人似乎都略有不同。異常值:博客()需要2個參數(1給出)

我想要實現的是:

我想有一個博客,我可以將位於例如在網站上發佈新聞的帖子 - mysite.com/blog/那麼你可以通過點擊來查看這些帖子單獨地從每個帖子中拉出slu through。 (這非常有效)。

但是我想拉博客應用程序的帖子,所以主頁。所以你可以查看最新帖子的片段。我現在明白我需要在app文件夾和主目錄之外創建一個視圖和一個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)) 

//視圖對於博客APP

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)) 

//模型從博客APP

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'] 

如果您需要更多的信息隨時問!我對這一切都很陌生,所以很容易! :) 提前致謝!

+0

聽起來像你'blogpost'視圖應該僅僅是與您的'blog_index'一個,肯定?你似乎想要更多或更少的相同的東西 - 博客文章的列表。有什麼不同? –

+0

嗨丹尼爾 - 好吧,我已經複製並粘貼,並從博客應用程序的視圖更改URL導入模型的名稱。我沒有收到此錯誤消息 - 無法導入名稱博客 – JDavies

+0

對不起,什麼?「改變了URL導入模型的名稱」 - 這是什麼意思?如果您更改了某些代碼,請更新上面的帖子,並顯示實際的錯誤消息。 –

回答

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中使用基於字符串的視圖名稱,就像您爲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')), 
    ) 
+0

嗨喬希,感謝您的回覆,真的很感激。我現在有東西要加載。如果我將url(r'/ $',blog_index)移動到2博客URL的底部,則可以加載/ blog /頁面的URL。不過,我在URL中添加了/。然後我的問題是主頁加載只是HTML沒有樣式等 – JDavies

+0

更新到上面的帖子: 如果我去任何頁面的尾部斜槓而不是/博客/它加載模板與index.html (就像我想要的那樣),但是當我在沒有/ eg mysite.com的情況下進入主頁時,它會在頁面中加載第一頁CMS – JDavies

+0

@JoshDavies我已通過修改URL來更新我的答案,以添加'^''/和'$'。進行上述更改,並讓我知道你如何去。 –

相關問題