2011-12-07 39 views
0

我正在制作一个博客应用程序,我想创建一个显示特定用户的所有博客的视图。为此,我需要将用户实例传递给我的看法是如何将用户实例传递给Django中的视图

def blogs(request,author=None,slug=None): 

    # If the author context has been passed then display the blogs of that author 
    if author: 

     # Displays a particular blog 
     if slug:   
      this_blog = get_object_or_404(Entry, creator = author, slug = slug) 
      return render_to_response('blog/blog_view.html', {'blog': this_blog,},context_instance=RequestContext(request)) 

     # Displays all the blogs of a particular user 
     else: 
      blog_list = Entry.objects.filter(creator = author) 
      return render_to_response('blog/all_blogs_user.html', {'Blogs': blog_list},context_instance=RequestContext(request)) 

虽然语法,这是正确的,但现在我不如何真正在我的网址通过这个用户上下文。早些时候,我尝试传递只是用户标识,但没有奏效。有没有其他的选择做这件事。当我在内部构建url或者重定向到这个特定的视图时,这很好,但url如何看起来像是在外部。我的urls.py是

from django.conf.urls.defaults import patterns, include, url 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from django.views.generic.simple import direct_to_template 

urlpatterns = patterns('', 
    url(r'^$', 'blog.views.blogs', name='all_blogs'), 
    url(r'^(?P<author>\d+)/(?P<slug>[-\w]+)/$', 'blog.views.blogs', name='view_blog'),      
    url(r'^(?P<author>\d+)/(?P<slug>[-\w]+)/edit/$', 'blog.views.post_form', name='edit_blog'), 
    url(r'^new/$', 'blog.views.post_form', name='new_blog'), 
    url(r'^(?P<author>\d+)/(?P<slug>[-\w]+)/delete/$', 'blog.views.delete_blog', name='delete_blog'), 

) 
urlpatterns += staticfiles_urlpatterns() 
+0

你是什么意思“刚刚路过的用户ID ..不起作用“?怎么了? –

+0

'creator'需要是'User'实例不是整数。首先通过'pk'获取'User',然后在'Entry'查询中使用它。 'author = User.objects.get(pk = author)' –

+0

@isbadawi其实问题是我能够传递用户ID,但我直接在过滤器中提到creator.id = author_id,这是错误的,因为rebus有指出我需要首先获取该对象,然后使用它 – Sachin

回答

1

只需通过request.user访问视图展示给用户。同样,您也可以在请求对象中使用POST数据。

+0

请求用户返回当前经过身份验证的用户,因此您只能看到自己的博客条目。 –

+0

是的,它只返回当前用户,我想查看任何用户的博客 – Sachin

+0

第二个选项是request.POST。例如localhost/blog?user = anyuser可用于发送数据。这个数据可以通过request.POST.get('user','')来访问, –

3

它一般是这样的:

urls.py

url(r'/author/(?P<slug>/$', 'author_index'), 

views.py

def author_index(request, slug): 
    author = get_object_or_404(User, username=slug) 

    return render_to_response('author_index.html', { 
     'author': author, 
    }, context_instance=RequestContext(request)) 
+0

我不明白你在说什么......这将简单地写出用户名= slug的用户 – Sachin

+0

你得到了“slug “(在这种情况下,用户名)来自URL的作者。你用它从数据库中查找相应的'User'实例。然后您将该实例传递给'render_to_response'中的模板上下文。现在,在你的模板中你可以访问'author'。你被卡住的部分是什么? –

+0

其实我想通过一个特定用户的博客列表,但我现在已经解决了。非常感谢我使用rebus解决方案 – Sachin

相关问题