...
 
Commits (5)
*.pyc
*.sqlite
*.sqlite.*
temp/
local_settings.py
site_media/news-images/
......@@ -7,4 +8,5 @@ site_media/text_src/
site_media/pdf/
site_media/portraits/
site_media/illustrations/
site_media/markdownx/
build/
\ No newline at end of file
......@@ -22,7 +22,8 @@ class Article(models.Model):
CATEGORIES = ((PUBLICATION,"Publications papier"), (EVENEMENT, "Événements"))
titre = models.CharField(max_length=200)
auteur = models.ForeignKey(auth.models.User, blank=True)
auteur = models.ForeignKey(auth.models.User, blank=True,
on_delete=models.CASCADE)
slug = models.SlugField()
pub_date = models.DateTimeField('Date de publication',default=datetime.now)
highlight = models.BooleanField('Mis en valeur dans le ruban',default=False)
......
......@@ -7,8 +7,8 @@ from texte.models import *
class RapportErreur(models.Model):
texte = models.ForeignKey(Texte)
page = models.ForeignKey(Page)
texte = models.ForeignKey(Texte, on_delete=models.CASCADE)
page = models.ForeignKey(Page, on_delete=models.CASCADE)
nom_rapporteur = models.CharField(max_length=30)
email_rapporteur = models.CharField(
max_length=30,
......@@ -31,8 +31,4 @@ class RapportErreur(models.Model):
pour effacer le rapport.
"""
return mark_safe('<a href="%s/delete/">Effacer</a>' % self.id)
bouton_effacer.allow_tags=True
bouton_effacer.short_description=u'Effacer l\'erreur'
......@@ -6,12 +6,6 @@
<h2>Bienvenue sur {% nom_site %}...</h2>
{% derniers_articles %}
<!--
<h3>Actualité</h3>
<ul>
<li><p><a href="http://test.hostile-au-style.fr/actu/dialogue-avec-l-orage/">Parution du recueil <strong>« Dialogue avec l'Orage »</strong>, par Flora Delalande</a></p></li>
</ul>
-->
<div class="intro">
<p class="first">
......
......@@ -110,7 +110,7 @@
<h4>{{annee.grouper}}</h4>
<table class="textlist">
{% for texte in annee.list %}
<tr class="{% cycle ligne1,ligne2 %}">
<tr class="{% cycle ligne1 ligne2 %}">
<td>
<a href="/textes/{{texte.slug}}">{{texte.titre}}</a>
</td>
......
......@@ -16,7 +16,7 @@
<table>
{% for texte in annee.list %}
{% if texte.est_compile %}
<tr class="{% cycle ligne1,ligne2 %}">
<tr class="{% cycle ligne1 ligne2 %}">
<td>
<a href="/textes/{{texte.slug}}">{{texte.titre}}</a>
</td>
......
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.core.management import call_command
from django.db import migrations, models
def load_initial_fixture(apps, schema_editor):
call_command('loaddata', 'texte/initial_data.json', **{'verbosity': 0})
class Migration(migrations.Migration):
dependencies = [
('texte', '0003_auto_20170905_1605'),
]
operations = [
migrations.RunPython(load_initial_fixture)
]
......@@ -40,7 +40,9 @@ class ProfilAuteur(models.Model):
"""Utilise le mécanisme de profil associé aux utilisateurs
Django pour gérer des infos supplémentaires sur les utilisateurs
"""
user = models.OneToOneField(auth.models.User, related_name='profile')
user = models.OneToOneField(
auth.models.User, related_name='profile',
on_delete=models.CASCADE)
photo = models.ImageField(
upload_to="portraits",
blank=True,
......@@ -124,8 +126,10 @@ class Illustration(models.Model):
#url = models.URLField(help_text="Lien vers\
#une page du site de l'auteur, la page wikimedia commons\
#ou autre...")
auteur = models.ForeignKey(AuteurExterne, blank=True, null=True,
help_text="Laisser vide si jamais vous êtes l'auteur de l'illustration")
auteur = models.ForeignKey(
AuteurExterne, blank=True, null=True,
on_delete=models.CASCADE,
help_text="Laisser vide si jamais vous êtes l'auteur de l'illustration")
fichier = models.ImageField(upload_to="illustrations")
square_x_pos = models.IntegerField(default = -1)
square_y_pos = models.IntegerField(default = -1)
......@@ -185,7 +189,9 @@ class Texte(models.Model):
""" Contient un texte publié, sa description, sa source Tex, sa
représentation html & pdf, ses métadonnées et ses commentaires
"""
auteur = models.ForeignKey(auth.models.User, blank=True)
auteur = models.ForeignKey(
auth.models.User,
blank=True, on_delete=models.CASCADE)
titre = models.CharField(max_length=200)
slug = models.SlugField()
pub_date = models.DateTimeField('Date de publication',default=datetime.now)
......@@ -198,8 +204,12 @@ class Texte(models.Model):
est_publie = models.BooleanField('Texte Publié',default=True,
help_text="Tant que cette option n'est pas sélectionnée, le texte ne sera pas visible des visiteurs. Utile par exemple pour un brouillon")
resume = models.TextField("Résumé", max_length=1500, blank=True)
licence = models.ForeignKey('Licence', default=settings.DEFAULT_LICENCE)
illustration = models.ForeignKey(Illustration,blank=True, null=True)
licence = models.ForeignKey(
'Licence', default=settings.DEFAULT_LICENCE,
on_delete=models.CASCADE)
illustration = models.ForeignKey(
Illustration,
blank=True, null=True, on_delete=models.CASCADE)
genre = models.ForeignKey(Genre, blank=True, null=True)
tags = TagField(help_text="Tags séparés par des virgules")
......@@ -357,14 +367,13 @@ class Texte(models.Model):
if not self.est_compile:
warning = "<img alt='Attention !' src='/static/img/icon_alert.gif' />"
return mark_safe('%s<a href="%s/compiler/">Compiler !</a>'%(warning,self.id))
bouton_compiler.allow_tags=True
bouton_compiler.short_description=u'Compiler le texte'
class Commentaire(models.Model):
"""Gère les comentaires sur les textes
"""
referent = models.ForeignKey(Texte)
referent = models.ForeignKey(Texte, on_delete=models.CASCADE)
# titre = models.CharField(max_length=1000)
auteur = models.CharField(max_length=50)
email = models.EmailField(max_length=50, blank=True, null=True, help_text=\
......@@ -381,7 +390,7 @@ class Section(models.Model):
Une section du texte par classe section, chaque Section doit être
rattachée à une représentation HtmlTex : self.html_repr.
"""
html_repr = models.ForeignKey('HtmlTex')
html_repr = models.ForeignKey('HtmlTex', on_delete=models.CASCADE)
page_debut = models.SmallIntegerField()
titre = models.CharField(max_length=200)
......@@ -392,7 +401,7 @@ class Section(models.Model):
class HtmlTex(models.Model):
""" Gère le fichier Tex du texte publié.
"""
parent = models.OneToOneField(Texte)
parent = models.OneToOneField(Texte, on_delete=models.CASCADE)
def __unicode__(self):
return self.parent.titre
......@@ -449,7 +458,9 @@ class Page(models.Model):
rattachée à une représentation HtmlTex : self.html_repr. la page
est appellée par son n° : self.no
"""
html_repr = models.ForeignKey(HtmlTex,blank=False)
html_repr = models.ForeignKey(
HtmlTex,
blank=False, on_delete=models.CASCADE)
no = models.SmallIntegerField()
page_suivante = models.BooleanField(default=False)
page_precedente = models.BooleanField(default=False)
......@@ -528,8 +539,10 @@ class ReferenceExterne(models.Model):
"""
#libelle = models.CharField('Libellé',max_length="150")
url = models.URLField()
texte = models.ForeignKey(Texte)
classe = models.ForeignKey(CategorieReferenceExterne)
texte = models.ForeignKey(Texte, on_delete=models.CASCADE)
classe = models.ForeignKey(
CategorieReferenceExterne,
on_delete=models.CASCADE)
def __unicode__(self):
return u"%s : %s" % (self.texte, self.classe.nom_court)
......
......@@ -9,7 +9,7 @@ import urlparse
from django.template import Library
from django.conf import settings
from django.db.models import get_model
from django.apps import apps
from django.template import Library, Node
from tagging.models import Tag
from django import template
......@@ -28,7 +28,7 @@ class LatestObjectsNode(template.Node):
self.model, self.num, self.varname = model, int(num), varname
def render(self, context):
model = get_model(*self.model.split('.'))
model = apps.get_amodel(*self.model.split('.'))
if model is not None:
if self.num == 1:
context[self.varname] = model.publie.all()[0]
......@@ -307,7 +307,7 @@ class TagsCloudForModelNode(Node):
"""TempleteTag trouvé à l'url: http://www.djangosnippets.org/snippets/140/ """
def __init__(self, model, varname, step):
self.varname, self.step = varname, step
self.model = texte.models.Texte#get_model(*model.split('.'))
self.model = texte.models.Texte
def render(self, context):
context[self.varname] = Tag.objects.cloud_for_model(self.model,
......
......@@ -143,8 +143,7 @@ class PublicWebsiteTests(TestCase):
response = self.client.get('/textes/foo/lire/')
self.assertEqual(response.status_code, 301)
self.assertEqual(
response.get('Location', None),
'http://testserver/textes/foo/lire/1/')
response.get('Location', None), '1/')
def test_text_list(self):
""" Just check no crash """
......
......@@ -38,8 +38,10 @@ urlpatterns += patterns(
# Textes
(r'^textes/$', TextListView.as_view()),
(r'^textes/(?P<slug>[-\w]+)/lire/$', RedirectView.as_view(url='1/')),
(r'^textes/(?P<slug>[-\w]+)/$', RedirectView.as_view(url='lire/1/')),
(r'^textes/(?P<slug>[-\w]+)/lire/$', RedirectView.as_view(
url='1/', permanent=True)),
(r'^textes/(?P<slug>[-\w]+)/$', RedirectView.as_view(
url='lire/1/', permanent=True)),
# Auteurs
(r'^auteurs/$', AuthorListView.as_view()),
......@@ -99,5 +101,5 @@ urlpatterns += [
urlpatterns += patterns(
'',
(r'^syndication/derniers-textes/$',
RedirectView.as_view(url='abonnement/rss/texts/')),
RedirectView.as_view(url='abonnement/rss/texts/', permanent=True)),
)