Strona główna Polish Python Coders Group
   Strona główna   Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyStok #42 - wystąpią Łukasz Langa i Dominik Kozaczko
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: Django blog/ rozdzielenie tekstu na paragrafy <p> przedzielenie tekstu zdjęciami  (Przeczytany 144 razy)
« : 12:41 11/07/19 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 31
Wiadomości: 444


Tworzę blog w DJ 2.2, mam wpis bloga jako TextField. Jeśli tekst (wpis w blogu) ma przykładowo 4-5 tys. znaków lub więcej to trochę głupio wygląda. Chciałbym poszczególne sekcje tekstu (paragrafy <p>) przedzielić zdjęciami, grafikami, video lub cytatami. 

Tylko jak to zrobić?

Teraz mam:

models.py

Kod
from django.db import models
 
class Blog(models.Model):
   title = models.CharField(max_length=150)
   blog_entry = models.TextField()
   pub_date = models.DateTimeField('date published')
   # ....


Można zrobić tak:

models.py

Kod
from django.db import models
 
class Blog(models.Model):
   title = models.CharField(max_length=150)
   # dla 4 paragrafów:
   blog_p1 = models.CharField(max_length=500)
   blog_p2 = models.CharField(max_length=500)
   blog_p3 = models.CharField(max_length=500)
   blog_p4 = models.CharField(max_length=500)  
   pub_date = models.DateTimeField('date published')
   # ....

ale to nienajlepsze rozwiązanie. Można użyć filtrów w szablonach (truncatewords albo truncatechars), ale wtedy utniemy tekst nie w tym miejscu co chcemy....

Pomysły mi się wyczerpały, może macie jakieś rozwiązanie?





Zapisane
« Odpowiedz #1 : 12:57 11/07/19 »
Guaz Online
Expert Python User

Zobacz profil
****

Reputacja: 72
Płeć: Mężczyzna
Wiadomości: 542


A próbowałeś zastosować po prostu jakieś kontenery?
Na przykład:
Kod
blog_p = [models.CharField(max_length) for _ in range(arg) ]

Myślę że podobnie jak w CodeIgniterze da się przekazać do modelu ile tych paragrafów ma być bądź dodać/odjąć ich ilość w razie potrzeby, tworząc odwołanie do funkcji która doda te CharFieldy oraz odświeży widok.

Kod
add_blog_p = lambda: blog_p.append(models.CharField(max_length))
del_blog_p = lambda: blog_p.pop()
*Dzięki temu że nie podajemy argumentów do lambdy typu `x=blog_p`, możemy ją wywołać i weźmie nam zmienną zawsze z przestrzeni danych którymi dysponujemy wewnątrz danej metody.


W widoku też zapewne możesz zrobić wtedy łatwo pętlę po elementach listy która ci zrobi paragraf dla każdego elementu listy. (100% nie daje, bo mój największy dev experience to php, zaś w Django tylko podstawowego bloga z książki liznąłem dopiero Język)
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #2 : 14:00 11/07/19 »
raydeal Offline
Expert Python User

Zobacz profil
****

Reputacja: 86
Wiadomości: 506


Wydaje mi się,że w takim przypadku do pola "blog_entry" najlepiej podpiąć TinyMCE. Tego używa większość CMSów i nie tylko.
Zapisane
« Odpowiedz #3 : 15:42 11/07/19 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 31
Wiadomości: 444


Myślałem o edytorze jak CKEditor, itp. tylko tam chyba trzeba podawać linki zewnętrzne do zdjęć, filmów video, etc. ? O ile filmy są na YT, to zdjęcia chciałbym wgrywać przez panel admina i nie wiem czy nie będzie kłopot z określeniem URI dla każdego zdjęcia (przed jego uploadem).

Czy ten kod @Guaz-a jest prawidłowy? Nie spotkałem się w Django z takim zapisem.
Zapisane
« Odpowiedz #4 : 12:48 13/07/19 »
Guaz Online
Expert Python User

Zobacz profil
****

Reputacja: 72
Płeć: Mężczyzna
Wiadomości: 542


Django to nadal python o czym wiele osób zapomina Uśmiech. lambdy to funkcje anonimowe, chodzi w tym zapisie głównie o to, aby podpiąć te funkcje anonimowe do elementów sterujących widokiem, co pozwoli ci na dodawanie i odejmowanie pól po odświeżeniu widoku. (Podobny mechanizm tylko inny składniowo na PHP działał, nie wiem jak to obsłużyć z poziomu Django, natomiast też pewnie byłaby metoda żeby zmusić to do działania.)
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #5 : 14:12 13/07/19 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 31
Wiadomości: 444


Wiem że Django to Python i nie twierdzę, że Twój kod jest zły, tylko pytam.... Spróbuję go odpalić, ale tak jak pisałem pierwszy raz spotykam się z takim zapisem. Jak Django to łyknie to dam znać....
Zapisane
« Odpowiedz #6 : Wczoraj o 02:27 »
rafal Offline
Hello World!

Zobacz profil WWW
*

Reputacja: 19
Płeć: Mężczyzna
Wiadomości: 65


Nie tykaj tego kodu. Pomysł z generowaniem pól modelu jest wariacki i nie ma prawa się udać - w Django pola modelu są przekładane na kolumny w tabeli w bazie danych i wymagają migracji, ale i tak każdy blogpost miałby tyle samo paragrafów co nie ma sensu.

Tak jak pisał raydeal, zainteresuj się gotowym edytorem. A jak chcesz spędzić nad tematem (dużo) więcej czasu i zrobić to "jak teraz modne" (i robi to np. Medium.com) to zainteresuj się edytorami WYSIWYM i reprezentacją dokumentu tekstowego jako JSON. Wagtail jest CMS'em dla Django który używa tego podejścia, a tutaj znajdziesz prezentację wyjaśniającą podejście WYSIWYM: https://www.youtube.com/watch?v=feUYwoLhE_4

Jeśli chcesz móc wstawiać jakieś media do artykułów, będziesz musiał to jakoś spiąć z edytorem, nawet jeśli nie użyjesz WYSIWYM.
Zapisane

Misago - Python Forum Software.
« Odpowiedz #7 : Wczoraj o 02:29 »
rafal Offline
Hello World!

Zobacz profil WWW
*

Reputacja: 19
Płeć: Mężczyzna
Wiadomości: 65


Alternatywnie blog mógłby trzymać artykuły jako dokumenty w markdownie, ale i tak musiałbyś wykonać jakiś interfejs wstawiania mediów do tekstu - chociażby przez wklejenie do dokumentu linka do grafiki wgranej wcześniej do `/media/`.
Zapisane

Misago - Python Forum Software.
« Odpowiedz #8 : Wczoraj o 11:31 »
DJangoL Offline
Professional Python User

Zobacz profil
***

Reputacja: 31
Wiadomości: 444


Dzięki Rafał!

Mam już chyba wszystkie możliwe rozwiązania, tylko pozostaje wybrać któreś z nich.


Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot