<file_sep>from django.shortcuts import render
from . import models
from django.db.models import Q
from django.core.paginator import Paginator

# Create your views here.

app_name='blog'
PAGS = 1

def index(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True)

    if queryset:
        publicaciones = models.Publicacion.objects.filter(Q(titulo__icontains = queryset) | Q(descripcion__icontains = queryset), estado=True).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'index.html', context)

def generales(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True, categoria=models.Categoria.objects.get(nombre__iexact='general'))

    if queryset:
        publicaciones = models.Publicacion.objects.filter(
            Q(titulo__icontains = queryset) |
            Q(descripcion__icontains = queryset),
            estado=True,
            categoria=models.Categoria.objects.get(nombre__iexact='general')
        ).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'generales.html', context)

def programacion(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True, categoria=models.Categoria.objects.get(nombre__iexact='programacion'))

    if queryset:
        publicaciones = models.Publicacion.objects.filter(
            Q(titulo__icontains = queryset) |
            Q(descripcion__icontains = queryset),
            estado=True,
            categoria=models.Categoria.objects.get(nombre__iexact='programacion')
        ).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'programacion.html', context)

def tutoriales(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True, categoria=models.Categoria.objects.get(nombre__iexact='tutoriales'))

    if queryset:
        publicaciones = models.Publicacion.objects.filter(
            Q(titulo__icontains = queryset) |
            Q(descripcion__icontains = queryset),
            estado=True,
            categoria=models.Categoria.objects.get(nombre__iexact='tutoriales')
        ).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'tutoriales.html', context)

def tecnologia(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True, categoria=models.Categoria.objects.get(nombre__iexact='tecnologia'))

    if queryset:
        publicaciones = models.Publicacion.objects.filter(
            Q(titulo__icontains = queryset) |
            Q(descripcion__icontains = queryset),
            estado=True,
            categoria=models.Categoria.objects.get(nombre__iexact='tecnologia')
        ).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'tecnologia.html', context)

def videojuegos(request):
    queryset = request.GET.get('buscar')
    publicaciones = models.Publicacion.objects.filter(estado=True, categoria=models.Categoria.objects.get(nombre__iexact='videojuegos'))

    if queryset:
        publicaciones = models.Publicacion.objects.filter(
            Q(titulo__icontains = queryset) |
            Q(descripcion__icontains = queryset),
            estado=True,
            categoria=models.Categoria.objects.get(nombre__iexact='videojuegos')
        ).distinct()

    paginator = Paginator(publicaciones, PAGS)
    page = request.GET.get('page')
    publicaciones = paginator.get_page(page)

    context = {'publicaciones':publicaciones}
    return render(request, 'videojuegos.html', context)

def detalle_publicacion(request, slug):
    publicacion = models.Publicacion.objects.get(slug=slug)
    context = {'publicacion':publicacion}
    return render(request, 'post.html', context)
<file_sep># Generated by Django 3.0.6 on 2020-05-11 23:41

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('blog', '0001_initial'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='autor',
            name='eliminado',
        ),
        migrations.RemoveField(
            model_name='categoria',
            name='eliminado',
        ),
        migrations.AddField(
            model_name='autor',
            name='estado',
            field=models.BooleanField(default=True),
        ),
        migrations.AddField(
            model_name='categoria',
            name='estado',
            field=models.BooleanField(default=True),
        ),
    ]
<file_sep>from django.db import models
from ckeditor.fields import RichTextField

# Create your models here.
class Categoria(models.Model):
    nombre = models.CharField(max_length=100, null=False, blank=False)
    estado = models.BooleanField(default=True)
    fecha_actualizacion = models.DateField(auto_now=True)
    fecha_creacion = models.DateField(auto_now_add=True)

    #auto_now: se actualiza cada vez que se edita el modelo
    #auto_now_add: se añade solamente al momento de la creación del objecto

    class Meta:
        verbose_name = 'Categoria'
        verbose_name_plural = 'Categorias'

    def __str__(self):
        return self.nombre


class Autor(models.Model):
    nombre = models.CharField(max_length=200, null=False, blank=False)
    apellido = models.CharField(max_length=200, null=False, blank=False)
    correo = models.EmailField(null=False, blank=False)
    facebook = models.URLField(null=True, blank=True)
    twitter = models.URLField(null=True, blank=True)
    instagram = models.URLField(null=True, blank=True)
    web = models.URLField(null=True, blank=True)
    estado = models.BooleanField(default=True)
    fecha_creacion = models.DateField(auto_now_add=True)

    class Meta:
        verbose_name = 'Autor'
        verbose_name_plural = 'Autores'

    def __str__(self):
        return '{}, {}'.format(self.apellido, self.nombre)

class Publicacion(models.Model):
    titulo = models.CharField(max_length=100, null=False, blank=False)
    slug = models.CharField(max_length=100, null=False, blank=False)
    descripcion = models.CharField(max_length=100, null=False, blank=False)
    contenido = RichTextField()
    imagen = models.URLField(max_length=255, null=False, blank=False)
    autor = models.ForeignKey(Autor, on_delete=models.CASCADE)
    categoria = models.ForeignKey(Categoria, on_delete=models.CASCADE)
    estado = models.BooleanField(default=True)
    fecha_actualizacion = models.DateField(auto_now=True)
    fecha_creacion = models.DateField(auto_now_add=True)

    class Meta:
        verbose_name = 'Publicacion'
        verbose_name_plural = 'Publicaciones'

    def __str__(self):
        return self.titulo
<file_sep>from django.contrib import admin
from . import models
from import_export import resources
from import_export.admin import ImportExportModelAdmin
# Register your models here.

#Para agregar los botones de importar/exportar hay que hacer un pip install django-import-export y crear la clase model_resource y añadirlo a la clase de model_admin
class Categoria_Resource(resources.ModelResource):
    class Meta:
        model = models.Categoria

class Categoria_Admin(ImportExportModelAdmin, admin.ModelAdmin):
    search_fields = ['nombre']
    list_display = ('nombre','estado','fecha_actualizacion','fecha_creacion')
    resource_class = Categoria_Resource

class Autor_Resource(resources.ModelResource):
    class Meta:
        model = models.Autor

class Autor_Admin(ImportExportModelAdmin, admin.ModelAdmin):
    search_fields = ['nombre','apellido','correo']
    list_display = ('nombre','apellido','correo','estado','fecha_creacion')
    resource_class = Autor_Resource

admin.site.register(models.Autor, Autor_Admin)
admin.site.register(models.Categoria, Categoria_Admin)
admin.site.register(models.Publicacion)
<file_sep># Generated by Django 3.0.6 on 2020-05-11 23:27

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Autor',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=200)),
                ('apellido', models.CharField(max_length=200)),
                ('correo', models.EmailField(max_length=254)),
                ('facebook', models.URLField(blank=True, null=True)),
                ('twitter', models.URLField(blank=True, null=True)),
                ('instagram', models.URLField(blank=True, null=True)),
                ('web', models.URLField(blank=True, null=True)),
                ('eliminado', models.BooleanField(default=False)),
                ('fecha_creacion', models.DateField(auto_now_add=True)),
            ],
            options={
                'verbose_name': 'Autor',
                'verbose_name_plural': 'Autores',
            },
        ),
        migrations.CreateModel(
            name='Categoria',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('nombre', models.CharField(max_length=100)),
                ('eliminado', models.BooleanField(default=False)),
                ('fecha_actualizacion', models.DateField(auto_now=True)),
                ('fecha_creacion', models.DateField(auto_now_add=True)),
            ],
            options={
                'verbose_name': 'Categoria',
                'verbose_name_plural': 'Categorias',
            },
        ),
    ]
<file_sep>from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('generales/', views.generales, name='generales'),
    path('tutoriales/', views.tutoriales, name='tutoriales'),
    path('videojuegos/', views.videojuegos, name='videojuegos'),
    path('programacion/', views.programacion, name='programacion'),
    path('tecnologia/', views.tecnologia, name='tecnologia'),
    path('<slug:slug>/', views.detalle_publicacion, name='detalle_publicacion')
]
<file_sep>{% extends "base.html" %}
{% load static %}

{% block titulo %}
  {{ publicacion.titulo }}
{% endblock %}

{% block imagen %}
  {{ publicacion.imagen }}
{% endblock %}

{% block titulo_principal %}
  <h1>{{ publicacion.titulo }}</h1>
  <p>{{ publicacion.descripcion }}</p>
{% endblock %}

{% block contenido %}
  {{ publicacion.contenido|safe }}
{% endblock %}

{% block barra_busqueda %}
{% endblock %}
<file_sep>asgiref==3.2.7
defusedxml==0.6.0
diff-match-patch==20181111
dj-static==0.0.6
Django==3.0.6
django-ckeditor==5.9.0
django-import-export==2.1.0
django-js-asset==1.2.2
et-xmlfile==1.0.1
gunicorn==20.0.4
jdcal==1.4.1
MarkupPy==1.14
odfpy==1.4.1
openpyxl==3.0.3
psycopg2==2.8.5
pytz==2020.1
PyYAML==5.3.1
sqlparse==0.3.1
static3==0.7.0
tablib==1.1.0
xlrd==1.2.0
xlwt==1.3.0
