如何在Django中从数据库打印条目?

时间:2019-03-14 04:18:17

标签: python django

我在数据库中保存了一些单独的条目(它们称为“粘贴”)。对于这些条目中的每一个,我都有一个随机生成的字符串,该字符串保存在一个名为generated_url的字段中,然后我可以将其输入地址栏以访问与该特定条目相关的详细信息。转到projectname.com/jF7Fwr将打印与以jF7Fwrgenerated_url的条目相关的所有详细信息。

我的问题是,尽管它可以正确地重定向到页面,但我没有打印任何详细信息,也不确定为什么。

这是我的views.py的相关部分。

def home_view(request, *args, **kwargs):
    print(args, kwargs)
    print(request.user)
    if request.method == 'POST':
        form2 = PostForm(request.POST)
        if form2.is_valid():
            post = form2.save(commit=False)
            post.poster = request.user
            post.content = form2.cleaned_data.get('content')
            post.title = form2.cleaned_data.get('title')
            post.syntax = form2.cleaned_data.get('syntax')
            post.public = form2.cleaned_data.get('public')
            rand = str(uuid.uuid4())[:6]
            while Paste.objects.filter(generated_url=rand):
                rand = str(uuid.uuid4())[:6]
            post.generated_url = rand
            form2.save()
            context = {
                "poster_name": post.poster,
                "paste_contents": post.content,
                "paste_title": post.title,
                "paste_syntax": post.syntax,
                "paste_visible": post.public
            }
            return HttpResponseRedirect(reverse('details', args=(post.generated_url,)))
    else:
        form2 = PostForm()

    return render(request, "home.html", {'form2': form2})

def detail_view(request, *args, **kwargs):
    return render(request, "paste_detail.html", {})

这是我的details.html页面:

{% extends "base.html" %}
{% block content %}
<p>Content of post:</p>
I AM REDIRECTED

<h1>Name of post: {{ post.title }}</h1>

<p>Content of post:</p>

<p>{{post.content|linebreaks}}</p>
<p>{{ poster_name }}
{{ paste_contents }}
{{ paste_title }}
{{ paste_syntax }}
{{ paste_visible }}</p>
<!--<form action="/{{post.generated_url}}/delete" method="post">
    {% csrf_token %}
    <input type="submit" name="delete" value="Delete" />
</form>-->
{% endblock %}

编辑:

我的detail_view应该是这样的吗?

def detail_view(request, *args, **kwargs):
    form2 = PostForm(request.POST)
    post = form2.save(commit=False)
    post.poster = request.user
    post.content = form2.cleaned_data.get('content')
    post.syntax = form2.cleaned_data.get('syntax')
    post.public = form2.cleaned_data.get('public')
    rand = str(uuid.uuid4())[:6]
    while Paste.objects.filter(generated_url=rand):
        rand = str(uuid.uuid4())[:6]
    post.generated_url = rand
    post.save()
    context = {
        "poster_name": post.poster,
        "paste_contents": post.content,
        "paste_title": post.title,
        "paste_syntax": post.syntax,
        "paste_visible": post.public
    }
    return render(request, "paste_detail.html", context)

对于每个def的变量范围应该如何携带,我有点困惑。

1 个答案:

答案 0 :(得分:1)

您的detail_view使用一个空上下文({}),而context中的home_view变量未使用。像在主页视图中一样在详细信息视图中填充上下文,它将起作用。为此,您将不得不从数据库中检索帖子。

请记住,重定向使客户端发出新请求,并且请求之间的上下文丢失。