【问题标题】:How to pass user instance to a view in Django如何将用户实例传递给Django中的视图
【发布时间】:2012-01-15 06:06:57
【问题描述】:

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

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 中实际传递这个用户上下文。早些时候,我尝试只传递用户 ID,但这不起作用。有没有其他选择可以做这件事。当我在内部构建 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()

【问题讨论】:

  • 您所说的“仅传递用户 id ... 不起作用”是什么意思?会发生什么?
  • creator 需要是 User 实例而不是整数。首先通过pk 获取User,然后在Entry 查询中使用它。 author = User.objects.get(pk=author)
  • @isbadawi 实际上问题是我能够传递用户 ID,但我在过滤器中直接引用为 creator.id = author_id 并且这是错误的,因为 rebus 指出我需要先得到那个对象然后使用它

标签: django django-views django-urls django-users


【解决方案1】:

它通常是这样工作的:

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

【讨论】:

  • 我没听懂你在说什么......这只会写用户名= slug的用户
  • 您从 URL 中获得作者的“slug”(在本例中为用户名)。您可以使用它从数据库中查找相应的User 实例。然后将该实例传递到render_to_response 中的模板上下文中。现在,在您的模板中,您可以访问author。你坚持的部分是什么?
  • 实际上我想传递一个特定用户的博客列表,但我现在已经解决了。非常感谢我使用了 rebus 解决方案
【解决方案2】:

您可以通过 request.user 简单地访问视图中的用户。同样,您也可以在请求对象中POST数据。

【讨论】:

  • 请求用户返回当前经过身份验证的用户,因此您只能看到自己的博客条目。
  • 是的,它只返回当前用户,我想查看任何用户的博客
  • 第二个选项是 request.POST。例如 localhost/blog?user=anyuser 可用于发送数据。而这些数据可以通过request.POST.get('user','')在视图中访问
猜你喜欢
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多