From 2ade6d765be48b6ad322183990b81b164ef0beba Mon Sep 17 00:00:00 2001 From: Peter Date: Fri, 15 May 2020 19:57:22 +0000 Subject: [PATCH] tag list --- fet2020/fet2020/views.py | 8 ++++++- fet2020/posts/admin.py | 3 ++- fet2020/posts/models.py | 27 ++++++++++++---------- fet2020/posts/templatetags/post_helpers.py | 2 +- fet2020/posts/urls.py | 1 + fet2020/posts/views.py | 9 +++++++- 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/fet2020/fet2020/views.py b/fet2020/fet2020/views.py index df60d7fe..0086d02e 100644 --- a/fet2020/fet2020/views.py +++ b/fet2020/fet2020/views.py @@ -7,8 +7,14 @@ from posts.models import Post def index(request): posts=deque(Post.news_objects.all()) l=len(posts) + def get_tags(lst): + for p in lst: + for t in list(p.tags.names()): + yield "#"+ t + + t=set( t for t in get_tags(posts)) if l>=1: featured_post=posts.popleft() - return render(request, 'home.html',{'posts':posts, 'featured_post':featured_post}) + return render(request, 'home.html',{'posts':posts, 'featured_post':featured_post, "tags_list": ", ".join(t)}) diff --git a/fet2020/posts/admin.py b/fet2020/posts/admin.py index 3a528abe..65e08ea2 100644 --- a/fet2020/posts/admin.py +++ b/fet2020/posts/admin.py @@ -6,7 +6,8 @@ from .forms import MyPostForm class MyPostAdmin(admin.ModelAdmin): form = MyPostForm model = Post - + list_filter=['is_event'] + list_display=['title','subtitle','slug','public_date'] def save_model(self, request, obj, form, change): obj.author = request.user super().save_model(request, obj, form, change) diff --git a/fet2020/posts/models.py b/fet2020/posts/models.py index c64efffd..5707e720 100644 --- a/fet2020/posts/models.py +++ b/fet2020/posts/models.py @@ -22,15 +22,15 @@ class NewsPostManager(models.Manager): class Post(models.Model): # id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) legacy_id=models.IntegerField(null=True) - legacy_rubrik_id=models.IntegerField(null=True) - title=models.CharField(max_length=200) # Titel des Posts - subtitle=models.CharField(max_length=500, null=True, blank=True) # subtitle - slug=models.SlugField(unique=True,null=True,blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url - body=models.TextField(null=True, blank=True) # Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden - image=models.ImageField(null=True,blank=True) # Ein Haupt Bild für den Post - author=models.ForeignKey(User,on_delete=models.SET_NULL, null=True,blank=True) # Wer hat das geschrieben - tags=TaggableManager(blank=True) # Tags - public_date=models.DateField('date published',null=True,blank=True, default=django.utils.timezone.now) # Datum ab dem etwas öffentlich sein soll + legacy_rubrik_id = models.IntegerField(null=True) + title =models.CharField(max_length=200) # Titel des Posts + subtitle = models.CharField(max_length=500, null=True, blank=True) # subtitle + slug = models.SlugField(unique=True,null=True,blank=True) # Slug = Text Basierter url bestandteil zb Fetsitzung 22.1.2020 --> fetsitzung_22_1_2020 für Url + body = models.TextField(null=True, blank=True) # Body Text Artikel Text soll später mit WYSIWG Editor bearbeitet werden + image = models.ImageField(null=True,blank=True) # Ein Haupt Bild für den Post + author = models.ForeignKey(User,on_delete=models.SET_NULL, null=True,blank=True) # Wer hat das geschrieben + tags = TaggableManager(blank=True) # Tags + public_date = models.DateField('date published',null=True,blank=True, default=django.utils.timezone.now) # Datum ab dem etwas öffentlich sein soll imported_from = models.CharField(max_length=200, null=True, blank=True) # Titel des Posts @@ -73,12 +73,14 @@ class Post(models.Model): return reverse('posts.show', kwargs={"id":self.slug}) def save(self, *args, **kwargs): + "save the post with some defaults" if self.id is None and (self.slug is None or self.slug ==""): self.slug=slugify(self.public_date.date())+"-"+slugify(self.title) - + if not self.event_start is None: + self.is_event=True super().save(*args, **kwargs) - self.tags.set(*re.findall(r'\#([\d\w]+)', str(self.subtitle)),*re.findall(r'\#([\d\w]+)', str(self.title))) + self.tags.set(*re.findall(r'\#([\d\w-]+)', str(self.subtitle)),*re.findall(r'\#([\d\w-]+)', str(self.title))) def __str__(self): return "Post (%s, %s): %s " %(self.slug, self.public_date.strftime("%d.%m.%Y"), self.title) @@ -88,7 +90,8 @@ class Post(models.Model): class PostSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Post - fields = ['slug','title', 'body','url', 'legacy_id','image', 'event_start','event_end','is_fetsitzung'] + fields = ['slug','title','subtitle', 'body','url','public_date', 'legacy_id','image', 'event_start','event_end','is_fetsitzung'] + diff --git a/fet2020/posts/templatetags/post_helpers.py b/fet2020/posts/templatetags/post_helpers.py index b1e24cca..2e04c7d2 100644 --- a/fet2020/posts/templatetags/post_helpers.py +++ b/fet2020/posts/templatetags/post_helpers.py @@ -10,4 +10,4 @@ register = template.Library() @stringfilter def tags_to_url(value): #return "Tag to url: %s" % value - return mark_safe(re.sub(r'\#([\d\w]+)', '#\g<1>', value)) \ No newline at end of file + return mark_safe(re.sub(r'\#([\d\w-]+)', '#\g<1>', value)) \ No newline at end of file diff --git a/fet2020/posts/urls.py b/fet2020/posts/urls.py index e1e6e07f..1eecf03a 100644 --- a/fet2020/posts/urls.py +++ b/fet2020/posts/urls.py @@ -1,6 +1,7 @@ from django.urls import path from . import views urlpatterns=[ + path('t/',views.tags,name='posts.tags'), path('',views.index,name='posts.index'), path('',views.show, name='posts.show'), diff --git a/fet2020/posts/views.py b/fet2020/posts/views.py index 8049e9f2..9c6e5c34 100644 --- a/fet2020/posts/views.py +++ b/fet2020/posts/views.py @@ -12,7 +12,14 @@ from django_filters.rest_framework import DjangoFilterBackend # Create your views here. def index(request): posts=deque(Post.objects.all()) - return render(request, 'posts/index.html', {"posts": posts}) + f=lambda p: p.tags + t=map(f, posts) + + return render(request, 'posts/index.html', {"posts": posts, "tags_list": t }) + +def tags(request,tag=""): + posts=deque(Post.objects.filter(tags__name=tag)) + return render(request, 'posts/index.html', {"posts": posts, "tags_list":None }) def show(request,id=None): print("id: %s" % id)