我正在创建一个用户可以在其中上传文档的网站。如果用户注销,则可以查看其他人的文档但不能下载 如果用户已登录,则可以从pdf查看器中的工具栏下载文档
即使注销,request.user.is_authenticated在主页中为false,但在其他页面中为true。因此,下载按钮不会隐藏,也不会显示登录按钮。
我尝试使用user.is_authenticated,但是它一直都返回true
if else条件在索引页面上工作正常,但在doc_detail.html中不起作用
urls.py
re_path(r'^all_files/(?P<doc_id>[0-9]+)/$',views.doc_detail,name = 'doc_detail'),
path('login/',auth_views.LoginView.as_view(template_name='homework/login.html'),name = 'login'),
views.py
def doc_detail(request,doc_id):
template = loader.get_template('homework/doc_detail.html')
doc = get_object_or_404(Document, pk = doc_id)
context = {
'doc':doc
}
return HttpResponse(template.render(context,request))
doc_detail.html
{{ doc.user.username }}
{{ doc.title }}
{{ doc.doc_type }} <br>
{% if request.user.is_authenticated %}
<iframe src="{{ doc.document.url }}#toolbar=1&navpanes=0&scrollbar=1" type="application/pdf" width = "80%" height = "600px" />
{% else %}
<iframe src="{{ doc.document.url }}#toolbar=0&navpanes=0&scrollbar=0" type="application/pdf" width = "80%" height = "600px" />
<a href=" url 'homework:login'">login</a>
{% endif %}
索引页
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
This is the homework page implement upload-routine explore-routine here
{% if request.user.is_authenticated %}
the user is {{ request.user.email }} {{ request.user.profile.institution }}
{% else %}
user not logged in
{% endif %}
{% if request.user.is_authenticated %}
<a href="{% url 'homework:logout' %}">logout</a>
<a href="{% url 'homework:update' %}">update</a>
<a href="{% url 'homework:upload' %}">upload</a>
<a href="{% url 'homework:my_uploads' %}">my uploads</a><br>
{% else %}
<a href="{% url 'homework:login' %}">login</a><br>
{% endif %}
<a href="{% url 'homework:all_files' %}">all files</a>
</body>
</html>
答案 0 :(得分:0)
views.py
@login_required
def doc_detail(request,doc_id):
template = loader.get_template('homework/doc_detail.html')
doc = get_object_or_404(Document, pk = doc_id)
context = {
'doc':doc
}
return HttpResponse(template.render(context,request))
doc_detail.html
{% if user.is_authenticated %}
<iframe src="{{ doc.document.url }}#toolbar=1&navpanes=0&scrollbar=1" type="application/pdf" width = "80%" height = "600px" />
{% else %}
<iframe src="{{ doc.document.url }}#toolbar=0&navpanes=0&scrollbar=0" type="application/pdf" width = "80%" height = "600px" />
<a href=" url 'homework:login'">login</a>
{% endif %}
答案 1 :(得分:0)
正如评论中指出的那样,您应该使用渲染快捷方式;似乎您将其与模板的render方法混淆了。没有理由直接在此处或在标准Django代码中的任何地方直接使用模板对象。
def doc_detail(request, doc_id):
doc = get_object_or_404(Document, pk=doc_id)
context = {
'doc':doc
}
return render(request, 'homework/doc_detail.html', context)