From 394c1989b4b7c1594c1deae18e3920ff370fc83b Mon Sep 17 00:00:00 2001 From: Domagoj Zecevic Date: Sun, 26 Nov 2023 22:11:33 +0100 Subject: [PATCH] first commit --- blog/.gitignore | 137 ++++++++++++++++++ blog/__init__.py | 0 blog/admin.py | 7 + blog/apps.py | 6 + blog/migrations/0001_initial.py | 23 +++ .../migrations/0002_post_short_description.py | 18 +++ blog/migrations/__init__.py | 0 blog/models.py | 10 ++ blog/templates/blog/post_detail.html | 4 + blog/templates/blog/post_list.html | 77 ++++++++++ blog/tests.py | 3 + blog/urls.py | 8 + blog/views.py | 10 ++ db.sqlite3 | Bin 0 -> 135168 bytes manage.py | 22 +++ myblog/__init__.py | 0 myblog/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 160 bytes myblog/__pycache__/settings.cpython-310.pyc | Bin 0 -> 2289 bytes myblog/__pycache__/urls.cpython-310.pyc | Bin 0 -> 343 bytes myblog/__pycache__/wsgi.cpython-310.pyc | Bin 0 -> 561 bytes myblog/asgi.py | 16 ++ myblog/settings.py | 124 ++++++++++++++++ myblog/urls.py | 7 + myblog/wsgi.py | 16 ++ urls.py | 7 + 25 files changed, 495 insertions(+) create mode 100644 blog/.gitignore create mode 100644 blog/__init__.py create mode 100644 blog/admin.py create mode 100644 blog/apps.py create mode 100644 blog/migrations/0001_initial.py create mode 100644 blog/migrations/0002_post_short_description.py create mode 100644 blog/migrations/__init__.py create mode 100644 blog/models.py create mode 100644 blog/templates/blog/post_detail.html create mode 100644 blog/templates/blog/post_list.html create mode 100644 blog/tests.py create mode 100644 blog/urls.py create mode 100644 blog/views.py create mode 100644 db.sqlite3 create mode 100644 manage.py create mode 100644 myblog/__init__.py create mode 100644 myblog/__pycache__/__init__.cpython-310.pyc create mode 100644 myblog/__pycache__/settings.cpython-310.pyc create mode 100644 myblog/__pycache__/urls.cpython-310.pyc create mode 100644 myblog/__pycache__/wsgi.cpython-310.pyc create mode 100644 myblog/asgi.py create mode 100644 myblog/settings.py create mode 100644 myblog/urls.py create mode 100644 myblog/wsgi.py create mode 100644 urls.py diff --git a/blog/.gitignore b/blog/.gitignore new file mode 100644 index 0000000..61ac0fc --- /dev/null +++ b/blog/.gitignore @@ -0,0 +1,137 @@ +# Django # +*.log +*.pot +*.pyc +__pycache__ +#db.sqlite3 +media + +# Backup files # +*.bak + +# If you are using PyCharm # +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# File-based project format +*.iws + +# IntelliJ +out/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Python # +*.py[cod] +*$py.class + +# Distribution / packaging +.Python build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +.pytest_cache/ +nosetests.xml +coverage.xml +*.cover +.hypothesis/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery +celerybeat-schedule.* + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +# Sublime Text # +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache +*.sublime-workspace +*.sublime-project + +# sftp configuration file +sftp-config.json + +# Package control specific files Package +Control.last-run +Control.ca-list +Control.ca-bundle +Control.system-ca-bundle +GitHub.sublime-settings + +# Visual Studio Code # +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history \ No newline at end of file diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/admin.py b/blog/admin.py new file mode 100644 index 0000000..9ccf7de --- /dev/null +++ b/blog/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import Post + +class PostAdmin(admin.ModelAdmin): + list_display = ('title', 'short_description', 'pub_date') + +admin.site.register(Post, PostAdmin) diff --git a/blog/apps.py b/blog/apps.py new file mode 100644 index 0000000..94788a5 --- /dev/null +++ b/blog/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class BlogConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'blog' diff --git a/blog/migrations/0001_initial.py b/blog/migrations/0001_initial.py new file mode 100644 index 0000000..9ed6ccf --- /dev/null +++ b/blog/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.7 on 2023-11-26 20:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('content', models.TextField()), + ('pub_date', models.DateTimeField(verbose_name='date published')), + ], + ), + ] diff --git a/blog/migrations/0002_post_short_description.py b/blog/migrations/0002_post_short_description.py new file mode 100644 index 0000000..8af2e28 --- /dev/null +++ b/blog/migrations/0002_post_short_description.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.7 on 2023-11-26 21:05 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blog', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='short_description', + field=models.TextField(blank=True, max_length=300, null=True), + ), + ] diff --git a/blog/migrations/__init__.py b/blog/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/blog/models.py b/blog/models.py new file mode 100644 index 0000000..e17c65b --- /dev/null +++ b/blog/models.py @@ -0,0 +1,10 @@ +from django.db import models + +class Post(models.Model): + title = models.CharField(max_length=200) + content = models.TextField() + short_description = models.TextField(max_length=300, blank=True, null=True) + pub_date = models.DateTimeField('date published') + + def __str__(self): + return self.title diff --git a/blog/templates/blog/post_detail.html b/blog/templates/blog/post_detail.html new file mode 100644 index 0000000..e7600e6 --- /dev/null +++ b/blog/templates/blog/post_detail.html @@ -0,0 +1,4 @@ +

{{ post.title }}

+

{{ post.short_description }}

+

{{ post.pub_date }}

+

{{ post.content }}

diff --git a/blog/templates/blog/post_list.html b/blog/templates/blog/post_list.html new file mode 100644 index 0000000..8abbff8 --- /dev/null +++ b/blog/templates/blog/post_list.html @@ -0,0 +1,77 @@ + + + + + + Dark Blog + + + + + + + + + +
+

Dark Blog Posts

+ + {% for post in posts %} +
+ +
+

{{ post.short_description }}

+

{{ post.pub_date }}

+
+
+ {% endfor %} +
+ + + + + + + + diff --git a/blog/tests.py b/blog/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/blog/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blog/urls.py b/blog/urls.py new file mode 100644 index 0000000..ad40f85 --- /dev/null +++ b/blog/urls.py @@ -0,0 +1,8 @@ +from django.urls import path +from . import views + +app_name = 'blog' +urlpatterns = [ + path('', views.post_list, name='post_list'), + path('/', views.post_detail, name='post_detail'), +] diff --git a/blog/views.py b/blog/views.py new file mode 100644 index 0000000..153b386 --- /dev/null +++ b/blog/views.py @@ -0,0 +1,10 @@ +from django.shortcuts import render, get_object_or_404 +from .models import Post + +def post_list(request): + posts = Post.objects.all() + return render(request, 'blog/post_list.html', {'posts': posts}) + +def post_detail(request, post_id): + post = get_object_or_404(Post, pk=post_id) + return render(request, 'blog/post_detail.html', {'post': post}) diff --git a/db.sqlite3 b/db.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..57d04547ccd5ec813bfb13e9f64b960ff160faad GIT binary patch literal 135168 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 LE`mAyviZ!vwWSmZ literal 0 HcmV?d00001 diff --git a/myblog/__pycache__/urls.cpython-310.pyc b/myblog/__pycache__/urls.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1f2f6fbb1757446016b991e54ea6c3e307b51bc GIT binary patch literal 343 zcmYk1Jx;_h5QY7hAJ{CS=LBiu3#@>GngY6X+1Lt>>^QO$q)nU4K+AF5QgH7*lObxA`g2vLwyqEs}MND)#l8`qv}9CrW>qO8c}C;0=RLnM9v`P9+V5Wyz9)p-Hp#wqWAZL8_aZt)rbH!* znq->9*fF&1OgjmIWZC_3pt|bdCyiO>8<`#|IwAeT?Vt3^WH@3H?OYdZjx{ScR|X4K z)wl%dvosxf245?5;FwfoU7@%3Xn>jm@=Vb8X-ma{%eW`^vrMT%mNCS_)g>9Vdw;2g_e&FZlwm zJ#qz=!A%L)^J`aVp8kz$ka0f=PYUpPvzPDD2u}xR@5jT7d~$kuIT{Zq`T51*^T*Te zqxSKc1MjshT)!83c^(<$d7$XR