Evgenii Legotckoi
Evgenii LegotckoiҚыр. 18, 2016, 3:41 Т.Ж.

Джанго - Сабақ 003. Джангодағы үлгі, үлгі және көрініс

Django модульдік қолданбалы жүйені пайдаланады, бір қолданба бірнеше қолданбалардан тұрады, олардың әрқайсысы өз функцияларына жауап береді. Өздеріңіз байқағандай, мақаланы жазу кезінде сайтта «Білім қоры» бөлімі бар, онда мақалалар бөлінген бірнеше бөлімдер бар.

Алдыңғы Wordpress сайтында жұмыс істегенде, Qt оқулықтарының тізіміне жаңа мақалаларды қосу үшін уақыт босқа кетті. Сол сайтта бет автоматты түрде жасалады және жарияланған күйімен жаңа мақала сақталған кезде бұл мақала автоматты түрде сәйкес бөлімнің тізіміне қосылады.

Мен EVILEG COM мысалын қолдана отырып, мұның минималды нұсқада қалай жүзеге асырылатынын анықтауды ұсынамын.


Жоба құрылымы

Атап айтқанда, бұл сайт жобада екі қолданбаны пайдаланады:

  1. home - негізгі индекс бетіне, қате беттеріне және негізгі үлгілерге жауап беретін қолданба
  2. білім - мақалалар мен мақалалардың бөлімдеріне жауап беретін қосымша

Егер сіз егжей-тегжейлі қарасаңыз, жобаның құрылымы келесідей болады:

mysite/
    manage.py
    mysite/
        \_\_init\_\_.py
        settings.py
        urls.py
        wsgi.py
    home/
        \_\_init\_\_.py
        admin.py
        apps.py
        models.py
        tests.py
        urls.py
        views.py
        templates/
            home/
                base.html
    knowledge/
        \_\_init\_\_.py
        admin.py
        apps.py
        models.py
        tests.py
        urls.py
        views.py
        templates/
            knowledge/
                article.html
                index.html
                section.html

Жобаны және жобадағы қолданбаларды құру туралы бірнеше сөз. Pycharm әзірлеу ортасы пайдаланылды, ол жобаны негізгі модульдермен, соның ішінде әкімші панелімен дайындайды, сондықтан мен әдепкі бойынша қосылмаған нәрселер туралы айтатын боламын.

Қосымшаларды жасау үшін келесі пәрмендерді пайдалану керек:

python manage.py startapp home
python manage.py startapp knowledge

settings.py параметрін орнату

Қолданбалы модульдер қолжетімді болуы үшін оларды жоба конфигурация файлына қосу керек.

INSTALLED\_APPS = [
    'home.apps.HomeConfig',
    'accounts.apps.AccountsConfig',
    ...
]

Модельдер

Жобада екі үлгі түрі қолданылады:

  1. Бөлім – белгілі бір тақырыпқа жататын бір ортақ белгі бойынша барлық мақалаларды біріктіретін бөлімдер
  2. Мақал – мақалалардың өзі

Модельдер models.py файлында сипатталған

Бұл деректер үлгілерін әзірлеу үшін Django ішіне кіріктірілген Model. сыныбынан мұра пайдаланылды.Сонымен қатар, User пайдаланушы үлгісі пайдаланылды, өйткені мақалаларда тіркелген пайдаланушылар арасынан автор көрсетілген. сайтында.

from django.db import models
from django.contrib.auth.models import User

Бөлім

Бөлім үлгісі мыналардан тұрады:

  1. Тақырып – бөлім тақырыбы
  2. URL – сайтта адрестің бір бөлігін қалыптастыру үшін пайдаланылады, яғни абсолютті жолдар сақталмайды, бірақ бөлімге баратын жолдың бір бөлігі.
  3. Сипаттама – мақалалар тізімінің алдында беттің жоғарғы жағында көрсетіледі

Модельдің кодта орындалуын қарастырайық:

class Section(models.Model):
    class Meta:
        db\_table = "section"

    section\_title = models.CharField(max\_length=200)
    section\_url = models.CharField(max\_length=50)
    section\_description = TextField()

    def \_\_str\_\_(self):
        return self.section\_title

Meta класы дерекқордағы кестелерге тікелей қатысты кейбір үлгі параметрлерін қайта анықтауға мүмкіндік береді. Бұл жағдайда кесте қалай шақырылатыны анықталады.

Модельде үш өріс бар, олардың екеуі CharField типті, ол енгізілген таңбалар саны шектеулі шағын жазбаларды білдіреді.

TextField түрі таңбалардың жеткілікті үлкен ерікті массивінің енгізілетінін білдіреді, оның ең үлкен өлшемі алдын ала белгісіз.

__str__ әдісін қайта анықтау және бұл жаңа әдіс емес, дәл басып шығару, әкімші панелінде көрсетілетін мақала тақырыбын қайтаруға мүмкіндік береді. Өйткені, егер бұл әдіс қайта белгіленбесе, онда әкімшідегі барлық жазбалар Бөлім нысаны сияқты көрінеді және бөлімдердің үлкен санымен қайда және не орналасқанын анықтау өте қиын болады.

Мақала

Модель келесі өрістерден тұрады:

  1. Мақаланың тақырыбы
  2. Бөлім – бұл Бөлімдер кестесінің сыртқы кілті, мақаланың белгілі бір бөлімге жататынын анықтайды.
  3. Автор – мақала авторы таңдайтын пайдаланушылар кестесінің сыртқы кілті
  4. Күні – жарияланған күні мен уақыты
  5. Мазмұн – бөлім үлгісіндегідей сипаттамаға ұқсас мәтіндік өріс
  6. Күй – мақалалар үшін бірнеше мәртебелерді қабылдаймын, қазіргі уақытта тек екеуі ғана пайдаланылады:
  7. Жоба – 0 мәні
  8. Жарияланған – 1 мәні
class Article(models.Model):
    class Meta:
        db\_table = "article"

    article\_title = models.CharField(max\_length=200)
    article\_section = models.ForeignKey(Section)
    article\_author = models.ForeignKey(User)
    article\_date = models.DateTimeField('Дата публикации')
    article\_content = TextField()
    article\_status = models.IntegerField()

    def \_\_str\_\_(self):
        return self.article\_title

Әкімші панелінде үлгілерді тіркеу

Әкімші панелінен мақалалар мен бөлімдерді өңдеу мүмкіндігін алу үшін оларды әкімші модулінде тіркеу қажет. Бұл сәйкес қолданбаның admin.py файлында орындалады.

from django.contrib import admin

from .models import Section, Article

admin.site.register(Section)
admin.site.register(Article)

Көші-қон

Үлгілерді жаздыңыз, үлгілерде барлық қажетті өрістер бар екеніне сенімдісіз бе? Содан кейін дерекқорды тасымалдауды орындау керек. Ол үшін келесі пәрмендерді орындаңыз.

python manage.py makemigrations
python manage.py migrate

Ескерту

Негізгі кілт әдетте автоматты түрде ауыстырылады және автоматты түрде өседі, сондықтан біз оны көрсетпейміз.

Үлгілер

Джангодағы шаблондар өте керемет, әсіресе оларды мұраға алуға болады және белгілі бір блоктар жойылады.

Жоба барлық басқа беттер мұраға алатын home қолданбасында бір негізгі үлгіні base.html жасады. Шартты үлгі құрылымы келесідей:

{% block head %}
{% endblock %}
{% block content %}
    {% block page %}
    {% endblock page %}
    {% block sidebar %}
    {% endblock %}
{% endblock content %}
{% block footer %}
{% endblock %}

Бұл жағдайда басқа беттердегі үлгілерді мұраға алған кезде қайта анықталатын бес блок бар.

index.html

Бұл барлық бөлімдердің тізімі көрсетілетін қолданбаның негізгі бетіне арналған үлгі. extends операторын пайдалана отырып, біз нақты бетке арналған home. қолданбасының негізгі үлгісінен мұраға алатынымызды көрсетеміз.

Сіз байқаған боларсыз, Django үлгілеу тілі if, for, url. конструкцияларын пайдаланады, бірақ бөлім_list және бөлім айнымалылары қайдан келді? - бөлім_тізімі көріністе деректерді дайындау кезінде үлгіге мәтінмәндік мән ретінде беріледі. Бөлімдердің тізімі бар екенін тексергеннен кейін біз үлгіге қажетті мәндерді ауыстыра отырып, тізімнің барлық элементтерін аралаймыз. Бөлім Бөлім үлгісіне сәйкес болғандықтан, сәйкес үлгі өріс атаулары автоматты түрде таңдалады.

url мекенжайына келетін болсақ, бұл мәлімдеме бөлім атты білім қолданбасынан мекенжай үлгісін алу керектігін көрсетеді, сонымен қатар бұл мекенжай үлгісінде бір айнымалы бар екенін білеміз. бөлім нысанының url тағайындаңыз. Бұл үлгілер urls.py файлында сипатталған. Біз оларды сәл кейінірек қарастырамыз.

{% extends 'home/base.html' %}
{% block page %}
    <article>
    <h1>Разделы</h1>
    {% if section\_list %}
        <ul>
        {% for section in section\_list %}
            <li>
            <a href="{% url 'knowledge:section' section.section\_url %}">{{ section.section\_title }}</a>
            </li>
        {% endfor %}
        </ul>
    {% endif %}
    </article>
{% endblock %}

бөлімі.html

Бөлім үлгісінде осы бөлімге сәйкес келетін мақалалар тізімі қалыптастырылады. Бөлім айнымалысы үлгіге бөлім нысаны туралы ақпаратты қамтитын мәтінмән ретінде беріледі. Біз бөлімнің тақырыбын және оның сипаттамасын ауыстырамыз. Сипаттама пішімдеудің сақталғанын көрсететін қауіпсіз арнайы аргументімен ауыстырылғанын ескеріңіз. Бұл html белгілеуін сақтау үшін жасалуы керек, әйтпесе пайдаланушы әдемі жасалған сипаттаманың орнына html орналасу кодын көреді.

Сондай-ақ мұнда осы бөлімге жататын барлық мақалалар туралы ақпарат жинағы бар нұсқа бар және бұл бөлім.article_set.all деп қоңырау шалу арқылы жүзеге асырылады, яғни біз осы бөлімге сыртқы кілті бар барлық мақалаларды аламыз. Сұрыптау орындалатын параметрді көрсететін dictsort арқылы мақалаларды сұрыптаймыз.

Ал if блогы мақаланың күйін тексереді, яғни жарияланбаған мақалалар көрсетілмейді.

url, үшін мекенжай үлгісі қайтадан пайдаланылады, бірақ екі аргументпен.

{% extends 'home/base.html' %}
{% block page %}
    <article>
    <h1>{{ section.section\_title }}</h1>
        <p>{{ section.section\_description|safe }}</p>
        <h2>Статьи</h2>
        <ul>
        {% for article in section.article\_set.all|dictsort:'article\_title' %}
            {% if article.article\_status %}
            <li>
            <a href="{% url 'knowledge:article' section.section\_url article.id %}">
                {{ article.article\_title }}
            </a>
            </li>
            {% endif %}
        {% endfor %}
        </ul>
    </article>
{% endblock %} 

article.html

Көріп отырғаныңыздай, мақаланың үлгісі ол туралы бірдеңе қосу үшін жеткілікті нашар.

{% extends 'home/base.html' %}
{% block page %}
    <article>
        <h1>{{ article.article\_title }}</h1>
        <p>{{ article.article\_content|safe }}</p>
    </article>
{% endblock %}

Ескерту

Егер сіз жоба құрылымын қарасаңыз, қолданбалардың үлгілер қалталарында қолданбалармен бірдей атқа ие көбірек қалталар бар екенін және оларда бет үлгілері бар екенін көресіз. Бұл нақты қай үлгінің қолданылатынын анықтау үшін жасалады. Django барлық қалталардан үлгілерді іздейді және атқа сәйкес келетін бірінші үлгіні таңдайды. Ал егер атаулар қиылыса, мысалы, index.html, онда қате үлгі таңдалуы мүмкін. Сондықтан аттар кеңістігі қажетті үлгіні дәл анықтау үшін пайдаланылады.

Өнімділік

Бұл жағдайда көріністен жұмыс өте шектеулі, сондықтан мен бірден views.py. файлының толық тізімін беремін.

Біз View сыныбынан мұра аламыз және GET сұрауын, яғни пайдаланушының бет сұрауын орындауға жауап беретін get әдісін қайта анықтаймыз. Біз сондай-ақ үлгіні бізге қажет контексте өңдейтін render_to_response әдістерін және get_object_or_404 әдістерін импорттаймыз, ол нысан болса, автоматты түрде 404 қатесін қайтарады. табылмады, сәйкес айнымалыға сәйкес .

Аты бойынша сұрыпталған барлық бөлімдер EKnowledgeIndex ішіне қабылданады және section_list деген атпен контекстке орналастырылады, Бұл айнымалы index.html. шаблонында пайдаланылғаны есіңізде.

Арнайы Бөлім ESectionView ішіне сұралған URL мекенжайында жіберілетін аргумент арқылы қабылданады. kwargs urls.py файлында көрсетілген үлгіге сәйкес url мекенжайынан алынған айнымалылар үшін ғана жауап береді.

EAarticleView ішінде нәрселер әлдеқайда қызықты. Мәселе мынада, url үлгісі екі айнымалыны пайдаланады, бірақ мақаланы алу үшін id арқылы сұраныс жасау жеткілікті, яғни URL мекенжайына жіберілетін Негізгі кілт .

from django.views import View
from django.shortcuts import render\_to\_response, get\_object\_or\_404

from .models import *


class EKnowledgeIndex(View):
    template\_name = 'knowledge/index.html'

    def get(self, request, *args, **kwargs):
        context = {}
        context['section\_list'] = Section.objects.all().order\_by('section\_title')

        return render\_to\_response(template\_name=self.template\_name, context=context)


class ESectionView(View):
    template\_name = 'knowledge/section.html'

    def get(self, request, *args, **kwargs):
        context = {}
        section = get\_object\_or\_404(Section, section\_url=self.kwargs['section'])

        context['section'] = section

        return render\_to\_response(template\_name=self.template\_name, context=context)


class EArticleView(View):
    template\_name = 'knowledge/article.html'

    def get(self, request, *args, **kwargs):
        context = {}
        article = get\_object\_or\_404(Article, id=self.kwargs['article\_id'])

        context['article'] = article

        return render\_to\_response(template\_name=self.template\_name, context=context)

URL үлгісі

Жарайды, бәрі жазылуы керек, бірақ оның жұмыс істеуіне, атап айтқанда сұраулар өңделетін url үлгілерін орнатуға өте аз қалды.

Django ерекшелігі - бұл үлгілер үлгі контроллерлерінен алынбаған тұрақты өрнек тексерулері болып табылады. Жеке мен үшін бұл тәсіл анық және ашық болып шықты, маған ұнайды. Ендеше, парақтарымызды қалай жандандыруға болатынын көрейік.

менің сайтым/менің сайтым/urls.py

Алдымен mysite/mysite/urls.py файлында үлгілерді орнату керек, ол сұрауды қай қолданбаға жіберу керектігін анықтайды. Мұнда сіз үйге, қолданбасына бағыт бар екенін көре аласыз, сайттың негізгі беті сонда көрсетіледі, бірақ мен бұл бөліктің сипаттамасына тоқталмаймын, өйткені біз бұл туралы айтпаймыз. мақала. Сондай-ақ сайттың басқару панеліне және бөлімдер мен мақалаларға жауап беретін білім, қосымшасына бағыт бар.

қосады, home және knowledge. қолданбаларында urls.py файлдарын қамтиды.

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^', include('home.urls')),
    url(r'^knowledge/', include('knowledge.urls')),
    url(r'^admin/', admin.site.urls),
]

менің сайтым/knowledge/urls.py

app_name үлгілердегі аттар кеңістігіне жауапты. Есіңізде ме? Үлгіде сәл жоғарырақ 'білім:бөлім' жазбасы болды.

Нені және қайда жіберілетінін тұрақты адамдар анықтайды. Жазбаларға қатысты

Және
,
онда бұл көріністердегі get әдісінде өңделген және kwargs көмегімен берілген айнымалылар ғана.

Ал, name шаблонның URL мекенжайының атын, яғни 'білім:бөліміндегі' екінші бөлікті көрсетеді.

Ал, мен соңғы атап өткім келетін нәрсе - шаблонда бар ^ символы. Оның көмегімен үлгінің бұрыннан танылған бөлігі жойылады. Яғни, бұл URL мекенжайларының басында mysite/mysite/urls.py. ішінде бұрын танылған knowledge/ , бар.

from django.conf.urls import url

from . import views

app\_name = 'knowledge'
urlpatterns = [
    url(r'^$', views.EKnowledgeIndex.as\_view(), name='index'),
    url(r'^(?P<section>[\w]+)/$', views.ESectionView.as\_view(), name='section'),
    url(r'^(?P<section>[\w]+)/(?P<article\_id>[0-9]+)/$', views.EArticleView.as\_view(), name='article')
]

Django үшін Timeweb хостының VDS сервері ұсынамын.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

ПК
  • Наурыз 3, 2018, 6:26 Т.Ж.

Спасибо за ваши статьи. Очень понятно и качественно пишите. Есть пара моментов в  данной статье, которые мне кажутся спорными. Например, именование полей внутри моделей(article_title, article_date вместо просто title и date). Думаю добавлять в качестве префикса имя модели несколько избыточно - поля без модели не используются и без всяких префиксов всегда понятно откуда они. Второй момент это использование в шаблоне для ссылки на конкретный объект тег url. Гораздо удобнее реализовать для модели метод get_absolute_url и использовать его. Это даст возможность полностью менять схему урлов без поиска и переписывания всех шаблонов. К тому же этот метод используется стандартной админкой для формирования ссылок "посмотреть на сайте". Ну и ваши представления легче было наследовать от соответсвующих generic views - DetailView, ListView.
Хотя может это всё допущения чтобы не усложнять материал.

Evgenii Legotckoi
  • Наурыз 4, 2018, 3:14 Т.Қ.

Спасибо за отзыв.

По факту согласен со всеми вашими примечаниями.
Но это действительно допущения, чтобы не перегружать материал всем подряд. А так да, активно пользуюсь get_absolute_url и дженериками . В одной статье есть и про дженереки информация.
Владислав Меленчук
  • Сәуір 27, 2020, 9:35 Т.Ж.

Хотелось спросить, можно ли создать многоуровневые url из свойств модели? Я вот с часик лежал, искал как это сделать не нашел, вопрос на хабре оставил, никто не ответил. Оригинальная документация говорит только об одном слаге, а все примеры заканчиваются на том, что есть домен и к нему slug. Я просто хотел прикрепить запись к определенной категории, и еще одной субкатегории, т.е типо домен/категория/подкатегории/запись
я сделал подобное, но блин, доступ к записи осуществляется даже с др.категории и вообще с любимым текстом, т.е ссылка каноническая, могу перейти и по test/test/запись и по nowork/test/запись, передавал в модель свойства вот так: kwargs=("url":self.url, "cat":self.cat.url, "sub":self.sub.url)

Evgenii Legotckoi
  • Сәуір 27, 2020, 9:47 Т.Ж.

Если я правильно понимаю ваш вопрос, то нечто подобное у меня реализовано для страниц правил пользования сайтом, вот например страница тем форума

Но там я формирую полный путь, укладываю его в slug, а вот url шаблон у меня сделан так

path('<path:slug>/', PageView.as_view(), name='page')

Но у меня реализация там сделана за счёт того, что я задаю частичный url, который собирает все parent страницы формирует уже итоговый url и кладёт его куда надо.

Ещё делал раньше как вы делаете, но я так полагаю, что у вас код смотреть нужно, наверняка у вас неправильно написан код где-то:

  • или метод get_absolute_url
  • или url диспетчера.
  • или не выкидываете ошибку 404 по View, если из сформированного url не удаётся найти объект.
Evgenii Legotckoi
  • Сәуір 27, 2020, 9:49 Т.Ж.

К слову говоря, если делали по этой статье, то там тоже в EArticleView нужно ещё добавить проверку на slug раздела, и если не совпадаетЮ, то выкинуть ошибку 404. Так что да, косяк в статье.

Владислав Меленчук
  • Сәуір 27, 2020, 9:53 Т.Ж.
  • (өңделген)

Я делаю вот так у себя в модели для получения ссылки:
Там где доработать это я закомментил, ибо получалось доступность по всем категориям, потом выяснил, что так вообще по всей ссылки.

models.py

# Формируем URL
    def get_absolute_url(self):
        #games = self.games.all()[0] доработь 'games': games.url, ->
        return reverse('article_detail', kwargs={'category': self.category.url, 'slug': self.url})

Вьюшка:

# Полная статья
class ArticleDetail(DetailView):
    model = Article
    slug_field = "url"

URLs

path('articles/<category>/<slug>/', views.ArticleDetail.as_view(), name="article_detail"),

Запись доступна по articles/blog/название статьи, но таким же образом она доступна к неподвязанной категории, т.е articles/files/название статьи
Также можно любой текст можно подставить, articles/131411414/название статьи и будет тоже доступно.

Evgenii Legotckoi
  • Сәуір 27, 2020, 9:59 Т.Ж.

Ну я так и думал. Здесь нужно или обычный View использовать, или формировать slug так, чтобы он содержал slug категории, и как у меня использовать path, но тут тогда будет проблем в том, что тогда url категории скорее всего перестанет работать.

Так что или берите обычный View, добавляйте туда метод get, и проверяйте как slug статьи, так и slug категории, которая будет привязана к статье, либо переопределяйте метод get_object у DetailView, но там также нужно будет ковырять как slug статьи, так и slug категории

Владислав Меленчук
  • Сәуір 27, 2020, 10:02 Т.Ж.

Хорошо, посмотрю что получится с простым View

МЗ
  • Қаң. 8, 2021, 3:05 Т.Қ.

Отлично. Спасибо. Вопрос, как мне теперь передать на индексную страницу(ту которая по умолчанию) содержание только статей, без секций? И вообще передать на дефолтную страницу? Что то не получается. PS: в джанго - недавно, неделю.

МЗ
  • Қаң. 8, 2021, 3:18 Т.Қ.

Я дура. Разобралась. Но, остаюсь вашим читателем)

МЗ
  • Қаң. 9, 2021, 2:30 Т.Қ.
from django.shortcuts import *
from django.http import *
from django.http import HttpResponseRedirect
from django.contrib.auth.forms import *
from django.urls import reverse_lazy
from django.views import generic
from django.views.generic import *
from .models import Post

# Create your views here.
def index(request):
    postview = Post.<- а object отсуствует?
    return render(request,'index.html')
def about(request):
    return render(request,'about.html')
def contact(request):
    return render(request,'contact.html')
def home (request):
    return render(request, 'home/index.html')
class SignUpView(generic.CreateView):
    form_class = UserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'


МЗ
  • Қаң. 9, 2021, 2:31 Т.Қ.

отсутствует object

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
m
moogoҚар. 22, 2024, 7:17 Т.Ж.
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

Бізді әлеуметтік желілерде бақылаңыз