如何在 Django 中为页面添加书签?
Posted
技术标签:
【中文标题】如何在 Django 中为页面添加书签?【英文标题】:How to bookmark a page in Django? 【发布时间】:2019-08-18 10:25:20 【问题描述】:我正在尝试编辑一个 html 页面,以便登录用户可以收藏/收藏video.id
这是 .html 文件
<td>
<form method='POST' action="% url 'researcher_view_app:favourite_post' video.id %">
% csrf_token %
<input type='hidden' name='video' value= video.id >
<button type='submit'>Bookmark</button>
</form>
</td>
这是 urls.py 文件
path('<int:fav_id>/favourite_post', views.favourite_post, name='favourite_post'),
这是 view.py 文件
def favourite_post(request, fav_id):
video = get_object_or_404(Video, id=fav_id)
if request.method == 'POST':
video.
return render(request, 'researcher_view_app/%s' % fav_id)
【问题讨论】:
谢谢你不加解释的投票者 您在此处存储“最喜欢”的机制是什么,另一个模型类?此问题中没有足够的信息来提供特定问题的答案。请添加足够的上下文,以便有人可以为您指出解决方案。 【参考方案1】: 首先修改包含用户模型的 models.pyclass ProjectUser(AbstractUser):
images = models.ManyToManyField(Images)
def __str__(self):
return self.email
在 .html 文件中添加以下内容:
% for image in available_images %
/* show image */
<form method='post' action="% url 'user-image-add' %">
% csrf_token %
<input type='hidden' name='image' value=image.id>
<button type='submit'>bookmark</button>
</form>
% endfor %
在您的 views.py 中添加以下方法
def user_image_add(request):
user_image_form = ImageForm(request.POST or None)
if request.method == 'POST' and user_image_form.is_valid():
request.user.images.add(user_image_form.cleaned_data['image'])
return JsonResponse(status=200)
raise Http404()
在您的添加中创建一个 forms.py 文件并添加以下内容:
class ImageForm(forms.Form):
image = forms.ModelChoiceField(queryset=Images.objects.all())
要显示那些已添加书签的图像,您可以迭代 request.user.images
(它为您提供图像的 QS),类似于上面的代码。
在 urls.py 中添加以下内容:
path('user-image-add/', views.user_image_add, 'user-image-add')
def is_bookmarked(self, video_id):
return self.bookmarked_videos.filter(id=video_id).exists()
同样is_bookmarked
可以添加到视频模型接受user_id并检查video.projectuser_set
。
并将以下内容添加到用户为视频添加书签的 .html 文件中
`% if video.is_bookmarked %`
删除不需要的
UserProfile
。只需确保在视图上下文中具有所需的实例即可。
【讨论】:
我更新了书签图片的答案。考虑到您在代码中的某处有一个视频模型,我认为您需要对其进行 m2m 并且只需将Video.image = FileField
显示给用户。
我发现基于 func 的视图处理起来更简单,如果你想要 cbv,你可以自己决定继承什么类并重做它,只需要几行。
编辑了我的答案以回答您关于如何检查视频是否已添加书签的更新问题
更新了它。接下来,您应该将代码放入您的项目中,并自己修复在 SO 问题规模上不可见的小问题。
image.id 在表单正文中,如果您想获取原始数据,可以在 request.POST 中使用。一旦调用is_valid
,表单就会对其进行解析、验证并保存到“cleaned_data”以上是关于如何在 Django 中为页面添加书签?的主要内容,如果未能解决你的问题,请参考以下文章
在 html 中为 iPhone 上的书签选项指定一个 url