mirror of
https://github.com/DerTyp7/tealcode-django-python.git
synced 2025-10-29 12:32:09 +01:00
j
This commit is contained in:
@@ -42,6 +42,7 @@ INSTALLED_APPS = [
|
||||
'django.contrib.staticfiles',
|
||||
'main.apps.MainConfig',
|
||||
'analytics.apps.AnalyticsConfig',
|
||||
'taggit',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from .models import Category, Topic
|
||||
from .models import Category, Rating, Topic
|
||||
|
||||
admin.site.register(Category)
|
||||
admin.site.register(Topic)
|
||||
admin.site.register(Topic)
|
||||
admin.site.register(Rating)
|
||||
30
TealCode/main/migrations/0009_auto_20211122_0903.py
Normal file
30
TealCode/main/migrations/0009_auto_20211122_0903.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 3.2.9 on 2021-11-22 08:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('main', '0008_alter_topic_output'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='topic',
|
||||
name='not_useful',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='topic',
|
||||
name='tags',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='topic',
|
||||
name='useful',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='topic',
|
||||
name='read_more',
|
||||
field=models.TextField(blank=True),
|
||||
),
|
||||
]
|
||||
20
TealCode/main/migrations/0010_topic_tags.py
Normal file
20
TealCode/main/migrations/0010_topic_tags.py
Normal file
@@ -0,0 +1,20 @@
|
||||
# Generated by Django 3.2.9 on 2021-11-22 09:59
|
||||
|
||||
from django.db import migrations
|
||||
import taggit.managers
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('taggit', '0003_taggeditem_add_unique_index'),
|
||||
('main', '0009_auto_20211122_0903'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='topic',
|
||||
name='tags',
|
||||
field=taggit.managers.TaggableManager(help_text='A comma-separated list of tags.', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Tags'),
|
||||
),
|
||||
]
|
||||
25
TealCode/main/migrations/0011_rating.py
Normal file
25
TealCode/main/migrations/0011_rating.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 3.2.9 on 2021-11-22 10:47
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import django.utils.timezone
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('main', '0010_topic_tags'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Rating',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('is_positive', models.BooleanField()),
|
||||
('ip', models.CharField(max_length=90)),
|
||||
('date_created', models.DateTimeField(default=django.utils.timezone.now)),
|
||||
('topic', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='main.topic')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -1,6 +1,7 @@
|
||||
from django.db import models
|
||||
from django.db.models.fields.related import ForeignKey
|
||||
from django.utils import timezone
|
||||
from taggit.managers import TaggableManager
|
||||
|
||||
class Category(models.Model):
|
||||
title = models.CharField(max_length=100, unique=True)
|
||||
@@ -18,9 +19,17 @@ class Topic(models.Model):
|
||||
date_created = models.DateTimeField(default=timezone.now)
|
||||
category = models.ForeignKey(Category, on_delete=models.CASCADE)
|
||||
version = models.CharField(max_length=100, blank=True)
|
||||
tags = models.CharField(max_length=200, blank=True)
|
||||
useful = models.IntegerField(default=0)
|
||||
not_useful = models.IntegerField(default=0)
|
||||
read_more = models.TextField(blank=True)
|
||||
tags = TaggableManager()
|
||||
|
||||
def __str__(self):
|
||||
return self.category.title + " - " + self.title
|
||||
|
||||
class Rating(models.Model):
|
||||
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
|
||||
is_positive = models.BooleanField()
|
||||
ip = models.CharField(max_length=90 )
|
||||
date_created = models.DateTimeField(default=timezone.now)
|
||||
|
||||
def __str__(self):
|
||||
return self.topic.title + " - " + self.is_positive + " - " + self.ip + " - " + self.date_created
|
||||
@@ -19,6 +19,11 @@
|
||||
color:rgb(21, 200, 132) !important;
|
||||
}
|
||||
|
||||
.current{
|
||||
color:rgb(21, 200, 132) !important;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.list-group-item{
|
||||
background-color: rgb(32, 102, 99);
|
||||
color: white;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<link rel="stylesheet" href="{% static 'main/highlight/styles/atom-one-dark.min.css' %}">
|
||||
|
||||
{% if title %}
|
||||
<title>TealCode - {{ title }} - {{ category_title }}</title>
|
||||
<title>TealCode - {{ title }}</title>
|
||||
{% else %}
|
||||
<title>TealCode</title>
|
||||
{% endif %}
|
||||
@@ -61,12 +61,12 @@
|
||||
</a>
|
||||
|
||||
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
|
||||
<li><a href="/" class="nav-link px-2 text-white">Categories</a></li>
|
||||
<li><a href="/category/java/" class="nav-link px-2 text-white">Java</a></li>
|
||||
<li><a href="/category/python/" class="nav-link px-2 text-white">Python</a></li>
|
||||
<li><a href="/category/c/" class="nav-link px-2 text-white">C</a></li>
|
||||
<li><a href="/category/cs/" class="nav-link px-2 text-white">C#</a></li>
|
||||
<li><a href="/category/c++/" class="nav-link px-2 text-white">C++</a></li>
|
||||
<li><a id="a-index" href="/" class="nav-link px-2 text-white">Categories</a></li>
|
||||
<li><a id="a-java" href="/category/java/" class="nav-link px-2 text-white">Java</a></li>
|
||||
<li><a id="a-python" href="/category/python/" class="nav-link px-2 text-white">Python</a></li>
|
||||
<li><a id="a-c" href="/category/c/" class="nav-link px-2 text-white">C</a></li>
|
||||
<li><a id="a-cs" href="/category/cs/" class="nav-link px-2 text-white">C#</a></li>
|
||||
<li><a id="a-c++" href="/category/c++/" class="nav-link px-2 text-white">C++</a></li>
|
||||
</ul>
|
||||
|
||||
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3">
|
||||
@@ -94,11 +94,19 @@
|
||||
|
||||
<footer class="py-3 my-4">
|
||||
<ul class="nav justify-content-center pb-3 mb-3">
|
||||
<li class="nav-item"><a href="/privacy/" class="nav-link px-2 text-muted">Cookies/Privacy/Datenschutz</a></li>
|
||||
<li class="nav-item"><a href="/about/" class="nav-link px-2 text-muted">About</a></li>
|
||||
<li class="nav-item"><a id="a-privacy" href="/privacy/" class="nav-link px-2 text-muted">Cookies/Privacy/Datenschutz</a></li>
|
||||
<li class="nav-item"><a id="a-about"href="/about/" class="nav-link px-2 text-muted">About</a></li>
|
||||
</ul>
|
||||
</footer>
|
||||
|
||||
|
||||
<script>
|
||||
{% if current %}
|
||||
document.getElementById('a-{{ current }}').classList.add("current");
|
||||
{% else %}
|
||||
document.getElementById('a-index').classList.add("current");
|
||||
{% endif %}
|
||||
</script>
|
||||
<script src="{% static 'js/bootstrap.js' %}"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -49,12 +49,41 @@
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row text-center">
|
||||
<div class="col"></div>
|
||||
<div class="col">
|
||||
<button onclick="" type="button" class="btn btn-outline-danger" >Not Helpful</button><br>
|
||||
<small class="text-danger">{{ notHelpful_count }}</small>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button onclick="" type="button" class=" btn btn-outline-success" >Helpful</button><br>
|
||||
<small class="text-success">{{ helpful_count }}</small>
|
||||
</div>
|
||||
<div class="col">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
|
||||
</div>
|
||||
<div class="col col-10 pt-5">
|
||||
|
||||
<div id="main-content-code">
|
||||
|
||||
|
||||
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam alias impedit ad quae. Eius soluta officia omnis cupiditate eaque explicabo corrupti tenetur nam ducimus nobis, repellendus deserunt? Voluptates, beatae consequatur?
|
||||
Ducimus rem aspernatur porro ut illum dolore sed minus. Facere, est possimus. Sapiente repellendus exercitationem voluptates quis magnam provident recusandae mollitia dignissimos explicabo hic fuga quam, incidunt similique consectetur reprehenderit!
|
||||
Totam incidunt ipsa veritatis vitae obcaecati, cumque nostrum dolorem! Odio quas dolorum eos minima laborum, accusantium omnis nihil dolore, obcaecati molestias praesentium provident quam. Inventore quisquam quo deserunt deleniti iusto.
|
||||
Tempore voluptatibus labore cumque rerum. Laborum rem doloribus quasi dolor illo voluptatem nihil provident quam quas dignissimos modi alias quia, dolorem ratione tempore. Quaerat recusandae consequuntur libero doloremque inventore autem!
|
||||
Pariatur amet placeat rerum adipisci. Aliquid libero perferendis, eos ratione aperiam non rerum alias iste, fuga labore perspiciatis voluptatem aut minima explicabo, eveniet voluptates officia consequuntur facilis! Asperiores, suscipit tempora!
|
||||
Incidunt minus deleniti inventore eaque nihil pariatur ea dignissimos voluptas, ipsum quaerat, reprehenderit illum, aperiam temporibus culpa non ipsam blanditiis commodi amet sapiente quam quidem quia! Perferendis quibusdam quod perspiciatis?
|
||||
Eaque, eveniet. Porro, unde quos maiores quaerat voluptatem nisi aspernatur fuga perspiciatis neque labore, blanditiis repudiandae a suscipit vel praesentium corrupti, ratione hic nesciunt eum modi animi eos? Cum, magni.
|
||||
Error, ad? Quia iure placeat, autem nobis voluptatibus porro magni nihil aut nesciunt, at, dolore quis doloribus dolorem dolores! Adipisci harum, ullam id perferendis consectetur maxime at blanditiis soluta aspernatur?
|
||||
Vero repellendus id doloremque magnam eligendi, libero reiciendis veritatis provident reprehenderit asperiores assumenda accusamus facilis architecto consequatur rem quo voluptate excepturi incidunt fuga. Rem inventore soluta mollitia laboriosam qui itaque!
|
||||
A maiores magni atque impedit nobis deserunt facilis dolore in, adipisci fuga repellendus voluptas odit natus sapiente iste minima consectetur cumque dolores modi odio nihil est? Quos natus repellendus nostrum! Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum</p>
|
||||
</div>
|
||||
<div class="col">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,5 +7,6 @@ urlpatterns = [
|
||||
path('category/<str:category>/', views.category, name="main-category"),
|
||||
path('about/', views.about, name="main-about"),
|
||||
path('privacy/', views.privacy, name="main-privacy"),
|
||||
path('search/<str:value>/', views.search, name="main-search"),
|
||||
path('sitemap.xml', views.sitemap, name="main-sitemap"),
|
||||
]
|
||||
|
||||
@@ -27,6 +27,9 @@ def topic(req, category, topic):
|
||||
'previous': previous_obj,
|
||||
'next': next_obj,
|
||||
'output': topic_obj.output,
|
||||
'current': category_obj.title,
|
||||
'helpful_count': 2,
|
||||
'notHelpful_count': 2,
|
||||
}
|
||||
|
||||
|
||||
@@ -48,12 +51,22 @@ def category(req, category):
|
||||
view = View(ip=get_client_ip(req), category=category_obj)
|
||||
view.save()
|
||||
|
||||
return render(req, "main/category.html", {'category_obj': category_obj, 'topics': topics_obj})
|
||||
context = {
|
||||
'category_obj': category_obj,
|
||||
'topics': topics_obj,
|
||||
'current': category_obj.title,
|
||||
'title': category_obj.display_name,
|
||||
}
|
||||
|
||||
return render(req, "main/category.html", context)
|
||||
|
||||
|
||||
return redirect("main-index")
|
||||
|
||||
|
||||
def search(req, value): # https://django-taggit.readthedocs.io/en/latest/getting_started.html
|
||||
|
||||
return HttpResponse("<h1>moin</h1>")
|
||||
|
||||
|
||||
|
||||
@@ -71,12 +84,14 @@ def sitemap(req):
|
||||
return render(req, 'sitemap.xml', context, 'text/xml')
|
||||
|
||||
def about(req):
|
||||
return render(req, "main/about.html")
|
||||
return render(req, "main/about.html", {'current': 'about'})
|
||||
|
||||
|
||||
def privacy(req):
|
||||
return render(req, "main/privacy.html")
|
||||
return render(req, "main/privacy.html", {'current': 'privacy'})
|
||||
|
||||
def rating(req, topic, is_positive):
|
||||
return HttpResponse("<h1>HALLO</h1>")
|
||||
|
||||
def get_client_ip(req):
|
||||
x_forwarded_for = req.META.get("HTTP_X_FORWARDED_FOR")
|
||||
|
||||
Reference in New Issue
Block a user