linkding/bookmarks/views/bookmarks.py

66 lines
2.0 KiB
Python

from django.core.paginator import Paginator
from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from bookmarks import queries
from bookmarks.models import Bookmark, BookmarkForm
from bookmarks.services.bookmarks import create_bookmark, update_bookmark
_default_page_size = 30
def index(request):
page = request.GET.get('page')
query_string = request.GET.get('q')
query_set = queries.query_bookmarks(request.user, query_string)
paginator = Paginator(query_set, _default_page_size)
bookmarks = paginator.get_page(page)
tags = queries.query_tags(request.user, query_string)
if request.GET.get('tag'):
mod = request.GET.copy()
mod.pop('tag')
request.GET = mod
context = {
'bookmarks': bookmarks,
'tags': tags,
'query': query_string if query_string else '',
}
return render(request, 'bookmarks/index.html', context)
def new(request):
if request.method == 'POST':
form = BookmarkForm(request.POST)
if form.is_valid():
bookmark = form.save(commit=False)
current_user = request.user
create_bookmark(bookmark, current_user)
return HttpResponseRedirect(reverse('bookmarks:index'))
else:
form = BookmarkForm()
return render(request, 'bookmarks/new.html', {'form': form})
def edit(request, bookmark_id: int):
bookmark = Bookmark.objects.get(pk=bookmark_id)
if request.method == 'POST':
form = BookmarkForm(request.POST, instance=bookmark)
if form.is_valid():
bookmark = form.save(commit=False)
update_bookmark(bookmark)
return HttpResponseRedirect(reverse('bookmarks:index'))
else:
form = BookmarkForm(instance=bookmark)
return render(request, 'bookmarks/edit.html', {'form': form, 'bookmark_id': bookmark_id})
def remove(request, bookmark_id: int):
bookmark = Bookmark.objects.get(pk=bookmark_id)
bookmark.delete()
return HttpResponseRedirect(reverse('bookmarks:index'))