我在数据库中保存了一些单独的条目(它们称为“粘贴”)。对于这些条目中的每一个,我都有一个随机生成的字符串,该字符串保存在一个名为generated_url
的字段中,然后我可以将其输入地址栏以访问与该特定条目相关的详细信息。转到projectname.com/jF7Fwr将打印与以jF7Fwr
为generated_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
的变量范围应该如何携带,我有点困惑。
答案 0 :(得分:1)
您的detail_view
使用一个空上下文({}
),而context
中的home_view
变量未使用。像在主页视图中一样在详细信息视图中填充上下文,它将起作用。为此,您将不得不从数据库中检索帖子。
请记住,重定向使客户端发出新请求,并且请求之间的上下文丢失。