Replace Thumbnail engine
This commit is contained in:
		@@ -9,129 +9,126 @@ import uuid
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.dispatch import receiver
 | 
			
		||||
from django.contrib.auth.models import AbstractUser
 | 
			
		||||
from django_thumbs.fields import ImageThumbsField
 | 
			
		||||
from easy_thumbnails.fields import ThumbnailerImageField
 | 
			
		||||
 | 
			
		||||
# Create your models here.
 | 
			
		||||
 | 
			
		||||
class Explorer(AbstractUser):
 | 
			
		||||
    """
 | 
			
		||||
    Custom user model
 | 
			
		||||
    Addtional fields wbd
 | 
			
		||||
    """
 | 
			
		||||
	"""
 | 
			
		||||
	Custom user model
 | 
			
		||||
	Addtional fields wbd
 | 
			
		||||
	"""
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.username
 | 
			
		||||
	def __str__(self):
 | 
			
		||||
		return self.username
 | 
			
		||||
 | 
			
		||||
class Voucher(models.Model):
 | 
			
		||||
    """
 | 
			
		||||
    Vouchers are authorization tokens to allow the registration of new users.
 | 
			
		||||
    A voucher has a code, a creation and a deletion date, which are all positional.
 | 
			
		||||
    Creation date is being set automatically during voucher creation. 
 | 
			
		||||
    """
 | 
			
		||||
	"""
 | 
			
		||||
	Vouchers are authorization tokens to allow the registration of new users.
 | 
			
		||||
	A voucher has a code, a creation and a deletion date, which are all positional.
 | 
			
		||||
	Creation date is being set automatically during voucher creation. 
 | 
			
		||||
	"""
 | 
			
		||||
 | 
			
		||||
    code = models.CharField(unique=True, max_length=10)
 | 
			
		||||
    created = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
    expires = models.DateField()
 | 
			
		||||
	code = models.CharField(unique=True, max_length=10)
 | 
			
		||||
	created = models.DateTimeField(auto_now_add=True)
 | 
			
		||||
	expires = models.DateField()
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return "Voucher " + str(self.pk)
 | 
			
		||||
	def __str__(self):
 | 
			
		||||
		return "Voucher " + str(self.pk)
 | 
			
		||||
 | 
			
		||||
class Place (models.Model):
 | 
			
		||||
    """
 | 
			
		||||
    Place defines a lost place (location, name, description etc.).
 | 
			
		||||
    """
 | 
			
		||||
	"""
 | 
			
		||||
	Place defines a lost place (location, name, description etc.).
 | 
			
		||||
	"""
 | 
			
		||||
 | 
			
		||||
    name = models.CharField(max_length=50)
 | 
			
		||||
    submitted_by = models.ForeignKey(
 | 
			
		||||
        Explorer,
 | 
			
		||||
        on_delete=models.SET_NULL,
 | 
			
		||||
        null=True,
 | 
			
		||||
        blank=True, 
 | 
			
		||||
        related_name='places'
 | 
			
		||||
    )
 | 
			
		||||
    location = models.CharField(max_length=50)
 | 
			
		||||
    latitude = models.FloatField()
 | 
			
		||||
    longitude = models.FloatField()
 | 
			
		||||
    description = models.TextField()
 | 
			
		||||
	name = models.CharField(max_length=50)
 | 
			
		||||
	submitted_when = models.DateTimeField(auto_now_add=True, null=True)
 | 
			
		||||
	submitted_by = models.ForeignKey(
 | 
			
		||||
		Explorer,
 | 
			
		||||
		on_delete=models.SET_NULL,
 | 
			
		||||
		null=True,
 | 
			
		||||
		blank=True, 
 | 
			
		||||
		related_name='places'
 | 
			
		||||
	)
 | 
			
		||||
	location = models.CharField(max_length=50)
 | 
			
		||||
	latitude = models.FloatField()
 | 
			
		||||
	longitude = models.FloatField()
 | 
			
		||||
	description = models.TextField()
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self.name
 | 
			
		||||
	def __str__(self):
 | 
			
		||||
		return self.name
 | 
			
		||||
 | 
			
		||||
def generate_image_upload_path(instance, filename):
 | 
			
		||||
    """
 | 
			
		||||
    Callback for generating path for uploaded images.
 | 
			
		||||
    """
 | 
			
		||||
	"""
 | 
			
		||||
	Callback for generating path for uploaded images.
 | 
			
		||||
	"""
 | 
			
		||||
 | 
			
		||||
    return 'places/' + str(uuid.uuid4())+'.'+filename.split('.')[-1]
 | 
			
		||||
	return 'places/' + str(uuid.uuid4())+'.'+filename.split('.')[-1]
 | 
			
		||||
 | 
			
		||||
class PlaceImage (models.Model):
 | 
			
		||||
    """
 | 
			
		||||
    PlaceImage defines an image file object that points to a file in uploads/.
 | 
			
		||||
    Intermediate image sizes are generated as defined in SIZES.
 | 
			
		||||
    PlaceImage references a Place to which it belongs.
 | 
			
		||||
    """
 | 
			
		||||
	"""
 | 
			
		||||
	PlaceImage defines an image file object that points to a file in uploads/.
 | 
			
		||||
	Intermediate image sizes are generated as defined in SIZES.
 | 
			
		||||
	PlaceImage references a Place to which it belongs.
 | 
			
		||||
	"""
 | 
			
		||||
 | 
			
		||||
    SIZES=(
 | 
			
		||||
            {'code': 'thumbnail', 'wxh': '390x390'},
 | 
			
		||||
            {'code': 'hero', 'wxh': '700x700'},
 | 
			
		||||
            {'code': 'large', 'wxh': '1920x1920'}
 | 
			
		||||
    )
 | 
			
		||||
        
 | 
			
		||||
    description = models.TextField(blank=True)
 | 
			
		||||
    filename = ImageThumbsField(
 | 
			
		||||
        upload_to=generate_image_upload_path,
 | 
			
		||||
        max_length=50,
 | 
			
		||||
        sizes=SIZES
 | 
			
		||||
    )
 | 
			
		||||
    place = models.ForeignKey(
 | 
			
		||||
        Place,
 | 
			
		||||
        on_delete=models.CASCADE,
 | 
			
		||||
        related_name='images'
 | 
			
		||||
    )
 | 
			
		||||
    submitted_by = models.ForeignKey(
 | 
			
		||||
        Explorer,
 | 
			
		||||
        on_delete=models.SET_NULL,
 | 
			
		||||
        null=True,
 | 
			
		||||
        blank=True, 
 | 
			
		||||
        related_name='images'
 | 
			
		||||
    )
 | 
			
		||||
	SIZES=(
 | 
			
		||||
			{'code': 'thumbnail', 'wxh': '390x390'},
 | 
			
		||||
			{'code': 'hero', 'wxh': '700x700'},
 | 
			
		||||
			{'code': 'large', 'wxh': '1920x1920'}
 | 
			
		||||
	)
 | 
			
		||||
		
 | 
			
		||||
	description = models.TextField(blank=True)
 | 
			
		||||
	filename = ThumbnailerImageField(upload_to=generate_image_upload_path)
 | 
			
		||||
	place = models.ForeignKey(
 | 
			
		||||
		Place,
 | 
			
		||||
		on_delete=models.CASCADE,
 | 
			
		||||
		related_name='images'
 | 
			
		||||
	)
 | 
			
		||||
	submitted_by = models.ForeignKey(
 | 
			
		||||
		Explorer,
 | 
			
		||||
		on_delete=models.SET_NULL,
 | 
			
		||||
		null=True,
 | 
			
		||||
		blank=True, 
 | 
			
		||||
		related_name='images'
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        """
 | 
			
		||||
        Returning the name of the corresponding place + id 
 | 
			
		||||
        of this image as textual represntation of this instance
 | 
			
		||||
        """
 | 
			
		||||
	def __str__(self):
 | 
			
		||||
		"""
 | 
			
		||||
		Returning the name of the corresponding place + id 
 | 
			
		||||
		of this image as textual represntation of this instance
 | 
			
		||||
		"""
 | 
			
		||||
 | 
			
		||||
        return ' '.join([self.place.name, str(self.pk)])
 | 
			
		||||
		return ' '.join([self.place.name, str(self.pk)])
 | 
			
		||||
 | 
			
		||||
# These two auto-delete files from filesystem when they are unneeded:
 | 
			
		||||
 | 
			
		||||
@receiver(models.signals.post_delete, sender=PlaceImage)
 | 
			
		||||
def auto_delete_file_on_delete(sender, instance, **kwargs):
 | 
			
		||||
    """
 | 
			
		||||
    Deletes file from filesystem
 | 
			
		||||
    when corresponding `PlaceImage` object is deleted.
 | 
			
		||||
    """
 | 
			
		||||
    if instance.filename:
 | 
			
		||||
        if os.path.isfile(instance.filename.path):
 | 
			
		||||
            os.remove(instance.filename.path)
 | 
			
		||||
	"""
 | 
			
		||||
	Deletes file from filesystem
 | 
			
		||||
	when corresponding `PlaceImage` object is deleted.
 | 
			
		||||
	"""
 | 
			
		||||
	if instance.filename:
 | 
			
		||||
		if os.path.isfile(instance.filename.path):
 | 
			
		||||
			os.remove(instance.filename.path)
 | 
			
		||||
 | 
			
		||||
@receiver(models.signals.pre_save, sender=PlaceImage)
 | 
			
		||||
def auto_delete_file_on_change(sender, instance, **kwargs):
 | 
			
		||||
    """
 | 
			
		||||
    Deletes old file from filesystem
 | 
			
		||||
    when corresponding `PlaceImage` object is updated
 | 
			
		||||
    with new file.
 | 
			
		||||
    """
 | 
			
		||||
    if not instance.pk:
 | 
			
		||||
        return False
 | 
			
		||||
	"""
 | 
			
		||||
	Deletes old file from filesystem
 | 
			
		||||
	when corresponding `PlaceImage` object is updated
 | 
			
		||||
	with new file.
 | 
			
		||||
	"""
 | 
			
		||||
	if not instance.pk:
 | 
			
		||||
		return False
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        old_file = PlaceImage.objects.get(pk=instance.pk).filename
 | 
			
		||||
    except PlaceImage.DoesNotExist:
 | 
			
		||||
        return False
 | 
			
		||||
	try:
 | 
			
		||||
		old_file = PlaceImage.objects.get(pk=instance.pk).filename
 | 
			
		||||
	except PlaceImage.DoesNotExist:
 | 
			
		||||
		return False
 | 
			
		||||
 | 
			
		||||
    new_file = instance.filename
 | 
			
		||||
    if not old_file == new_file:
 | 
			
		||||
        if os.path.isfile(old_file.path):
 | 
			
		||||
            os.remove(old_file.path)
 | 
			
		||||
	new_file = instance.filename
 | 
			
		||||
	if not old_file == new_file:
 | 
			
		||||
		if os.path.isfile(old_file.path):
 | 
			
		||||
			os.remove(old_file.path)
 | 
			
		||||
 
 | 
			
		||||
@@ -4,13 +4,45 @@
 | 
			
		||||
# {% block title %}Place erstellen{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block maincontent %}
 | 
			
		||||
<form class="LP-Form" method="POST" enctype="multipart/form-data">
 | 
			
		||||
	<fieldset class="LP-Form__Fieldset">
 | 
			
		||||
		<legend class="LP-Form__Legend">Place erstellen</legend>
 | 
			
		||||
		{% csrf_token %}
 | 
			
		||||
		<div class="LP-Form__Composition LP-Form__Composition--breakable">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_form.name %}
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_form.location %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition LP-Form__Composition--breakable">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_form.latitude %}
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_form.longitude %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_form.description %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=place_image_form.filename %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<input type="submit" class="LP-Button" value="Abschicken"/>
 | 
			
		||||
		</div>
 | 
			
		||||
	</fieldset>
 | 
			
		||||
 | 
			
		||||
<h2>Place erstellen</h2>
 | 
			
		||||
<form method="post" enctype="multipart/form-data">
 | 
			
		||||
  {% csrf_token %}
 | 
			
		||||
  {{ place_form.as_p }}
 | 
			
		||||
  {{ place_image_form.as_p }}
 | 
			
		||||
  <button type="submit">Abschicken</button>
 | 
			
		||||
</form>
 | 
			
		||||
 | 
			
		||||
{% endblock maincontent %}
 | 
			
		||||
							
								
								
									
										54
									
								
								lostplaces/lostplaces_app/templates/home.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								lostplaces/lostplaces_app/templates/home.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
{% extends 'global.html'%}
 | 
			
		||||
{% load static %}
 | 
			
		||||
 | 
			
		||||
# {% block title %}Start{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block maincontent %}
 | 
			
		||||
 | 
			
		||||
{% if user.is_authenticated %}
 | 
			
		||||
  Hi {{ user.username }}!
 | 
			
		||||
  <p><a href="{% url 'logout' %}">logout</a></p>
 | 
			
		||||
{% else %}
 | 
			
		||||
  <p>Du bist nicht eingeloggt.</p>
 | 
			
		||||
  <a href="{% url 'login' %}">login</a> |
 | 
			
		||||
  <a href="{% url 'signup' %}">signup</a>
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
<div class="LP-PlaceGrid">
 | 
			
		||||
    <h1 class="LP-Headline LP-Headline">Explorere the latest locations</h1>
 | 
			
		||||
    <ul class="LP-PlaceGrid__Grid">
 | 
			
		||||
		{% for place in place_list %}
 | 
			
		||||
        <li class="LP-PlaceGrid__Item">
 | 
			
		||||
            <a href="{% url 'place_detail' pk=place.pk %}" class="LP-Link">
 | 
			
		||||
                <article class="LP-PlaceTeaser">
 | 
			
		||||
                    <div class="LP-PlaceTeaser__Image">
 | 
			
		||||
                        <img class="LP-Image" src="{{ place.images.first.filename.thumbnail.url}}" />
 | 
			
		||||
                    </div>
 | 
			
		||||
                    <div class="LP-PlaceTeaser__Meta">
 | 
			
		||||
                        <div class="LP-PlaceTeaser__Info">
 | 
			
		||||
                            <span class="LP-PlaceTeaser__Title">
 | 
			
		||||
                                <h1 class="LP-Headline LP-Headline--teaser">{{place.name}}</h1>
 | 
			
		||||
                            </span>
 | 
			
		||||
                            <span class="LP-PlaceTeaser__Detail">
 | 
			
		||||
                                <p class="LP-Paragraph">{{place.location}}</p>
 | 
			
		||||
                            </span>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="LP-PlaceTeaser__Description">
 | 
			
		||||
                            <p class="LP-Paragraph">{{place.description}}</p>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="LP-PlaceTeaser__Icons">
 | 
			
		||||
                            <ul class="LP-Icon__List">
 | 
			
		||||
                                <li class="LP-Icon__Item"><img class="LP-Icon" src="{% static '/icons/favourite.svg' %}" /></li>
 | 
			
		||||
                                <li class="LP-Icon__Item"><img class="LP-Icon" src="{% static '/icons/location.svg' %}" /></li>
 | 
			
		||||
                                <li class="LP-Icon__Item"><img class="LP-Icon" src="{% static '/icons/flag.svg' %}" /></li>
 | 
			
		||||
                            </ul>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
				</article>
 | 
			
		||||
			</a>
 | 
			
		||||
		</li>
 | 
			
		||||
		{% endfor %}
 | 
			
		||||
    </ul>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
{% endblock maincontent %}
 | 
			
		||||
@@ -10,7 +10,7 @@
 | 
			
		||||
        <a href="{% url 'place_detail' pk=place.pk %}" class="LP-Link">
 | 
			
		||||
            <article class="LP-Place">
 | 
			
		||||
                <div class="LP-Place__ImageContainer">
 | 
			
		||||
                    <img class="LP-Place__Image" src="{{ place.images.first.filename.url_thumbnail }}" />
 | 
			
		||||
                    <img class="LP-Place__Image" src="{{ place.images.first.filename.thumbnail.url }}" />
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="LP-Place__Assets">
 | 
			
		||||
                    <div class="LP-Place__Info">
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
{% extends 'global.html'%}
 | 
			
		||||
{% load static %}
 | 
			
		||||
{% load thumbnail %}
 | 
			
		||||
 | 
			
		||||
{% block title %}{{place.name}}{% endblock %}
 | 
			
		||||
 | 
			
		||||
@@ -9,66 +10,71 @@
 | 
			
		||||
 | 
			
		||||
<article class="LP-PlaceOverview">
 | 
			
		||||
    <div class="LP-PlaceOverview__Info">
 | 
			
		||||
        <img class="LP-PlaceOveriew__Image" src="{{ place.images.first.filename.url_hero }}">
 | 
			
		||||
        <div class="LP-PlaceOveriew__Image">
 | 
			
		||||
			<img src="{{ place.images.first.filename.hero.url }}" class="LP-Image" /> 
 | 
			
		||||
		</div>
 | 
			
		||||
        <article class="LP-PlaceOverView__Description">
 | 
			
		||||
            <div class="LP-TextSection">
 | 
			
		||||
                <h1 class="LP-Headline LP-Headline--main">{{place.name}}</h1>
 | 
			
		||||
                <p class="LP-Text LP-Content">{{place.description}}</p>
 | 
			
		||||
                <h1 class="LP-Headline LP-Headline">{{place.name}}</h1>
 | 
			
		||||
                <p class="LP-Paragraph LP-Paragraph">{{place.description}}</p>
 | 
			
		||||
            </div>
 | 
			
		||||
        </article>
 | 
			
		||||
    </div>
 | 
			
		||||
    <article style="clear:both;">
 | 
			
		||||
        <h2 class="LP-Headline LP-Headline">Sicherheitsmaßnahmen</h2>
 | 
			
		||||
        <div class="LP-Content">
 | 
			
		||||
            <ul class="LP-SecurityMeasure__List">
 | 
			
		||||
                <li class="LP-SecurityMeasure__Item"><span class="LP-Text">Kameras</span></li>
 | 
			
		||||
                <li class="LP-SecurityMeasure__Item"><span class="LP-Text">Zaun</span></li>
 | 
			
		||||
                <li class="LP-SecurityMeasure__Item"><span class="LP-Text">Wachhund</span></li>
 | 
			
		||||
                <li class="LP-SecurityMeasure__Item"><span class="LP-Text">Alarmanlage</span></li>
 | 
			
		||||
                <li class="LP-SecurityMeasure__Item"><span class="LP-Text">Selbstschussanlage</span></li>
 | 
			
		||||
            </ul>
 | 
			
		||||
    <article class="LP-Section">
 | 
			
		||||
        <h1 class="LP-Headline LP-Headline">Sicherheitsmaßnahmen</h1>
 | 
			
		||||
        <div class="LP-Content__Wrapper">
 | 
			
		||||
            <div class="LP-Content">
 | 
			
		||||
                <div class="LP-TagList">
 | 
			
		||||
                    <ul class="LP-TagList__List">
 | 
			
		||||
						<li class="LP-TagList__Item">
 | 
			
		||||
							<div class="LP-Tag">
 | 
			
		||||
								<p class="LP-Paragraph LP-Paragraph">Kamera</p>
 | 
			
		||||
							</div>
 | 
			
		||||
						</li>
 | 
			
		||||
						<li class="LP-TagList__Item">
 | 
			
		||||
							<div class="LP-Tag">
 | 
			
		||||
								<p class="LP-Paragraph LP-Paragraph">Wachhund</p>
 | 
			
		||||
							</div>
 | 
			
		||||
						</li>
 | 
			
		||||
						<li class="LP-TagList__Item">
 | 
			
		||||
							<div class="LP-Tag">
 | 
			
		||||
								<p class="LP-Paragraph LP-Paragraph">Zaun</p>
 | 
			
		||||
							</div>
 | 
			
		||||
						</li>
 | 
			
		||||
						<li class="LP-TagList__Item">
 | 
			
		||||
							<div class="LP-Tag">
 | 
			
		||||
								<p class="LP-Paragraph LP-Paragraph">Security</p>
 | 
			
		||||
							</div>
 | 
			
		||||
						</li>
 | 
			
		||||
                    </ul>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </article>
 | 
			
		||||
    <article>
 | 
			
		||||
        <h2 class="LP-Headline LP-Headline">Karten</h2>
 | 
			
		||||
        <div class="LP-Content">
 | 
			
		||||
            <ul class="LP-LinkList__List">
 | 
			
		||||
                <li class="LP-LinkList__Item"><a target="_blank" href="https://www.google.com/maps?q={{place.latitude}},{{place.longitude}}" class="LP-Link"><span class="LP-Text">Google Maps</span></a></li>
 | 
			
		||||
                <li class="LP-LinkList__Item"><a target="_blank" href="https://www.tim-online.nrw.de/tim-online2/?center={{place.latitude}},{{place.longitude}}&icon=true&bg=dop" class="LP-Link"><span class="LP-Text">TIM Online</span></a></li>
 | 
			
		||||
                <li class="LP-LinkList__Item"><a target="_blank" href="http://www.openstreetmap.org/?mlat={{place.latitude}}&mlon={{place.longitude}}&zoom=16" class="LP-Link"><span class="LP-Text">OSM</span></a></li>
 | 
			
		||||
            </ul>
 | 
			
		||||
    <article class="LP-Section">
 | 
			
		||||
        <h1 class="LP-Headline LP-Headline">Links</h1>
 | 
			
		||||
        <div class="LP-Content__Wrapper">
 | 
			
		||||
            <div class="LP-Content">
 | 
			
		||||
                <ul class="LP-LinkList__List">
 | 
			
		||||
                    <li class="LP-LinkList__Item"><a target="_blank" href="https://www.google.com/maps?q={{place.latitude}},{{place.longitude}}" class="LP-Link"><span class="LP-Text">Google Maps</span></a></li>
 | 
			
		||||
                	<li class="LP-LinkList__Item"><a target="_blank" href="https://www.tim-online.nrw.de/tim-online2/?center={{place.latitude}},{{place.longitude}}&icon=true&bg=dop" class="LP-Link"><span class="LP-Text">TIM Online</span></a></li>
 | 
			
		||||
                	<li class="LP-LinkList__Item"><a target="_blank" href="http://www.openstreetmap.org/?mlat={{place.latitude}}&mlon={{place.longitude}}&zoom=16" class="LP-Link"><span class="LP-Text">OSM</span></a></li>
 | 
			
		||||
                </ul>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </article>
 | 
			
		||||
    <article>
 | 
			
		||||
        <h2 class="LP-Headline LP-Headline">Fotoalben</h2>
 | 
			
		||||
        <div class="LP-Content">
 | 
			
		||||
            <ul class="LP-LinkList__List">
 | 
			
		||||
                <li class="LP-LinkList__Item"><a target="_blank" href="https://gallery.commander1024.de/index.php?/category/verlassenes-wohnhaus-mesum" class="LP-Link"><span class="LP-Text">Commander1024</span></a></li>
 | 
			
		||||
                <li class="LP-LinkList__Item"><a href="#" class="LP-Link LP-Link--iconized">
 | 
			
		||||
                    <div class="LP-Link__IconWrapper">
 | 
			
		||||
                       <svg class="LP-Link__Icon" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg"
 | 
			
		||||
                           xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512"
 | 
			
		||||
                           xml:space="preserve">
 | 
			
		||||
                           <g>
 | 
			
		||||
                               <path d="M492,236H276V20c0-11.046-8.954-20-20-20c-11.046,0-20,8.954-20,20v216H20c-11.046,0-20,8.954-20,20s8.954,20,20,20h216
 | 
			
		||||
               v216c0,11.046,8.954,20,20,20s20-8.954,20-20V276h216c11.046,0,20-8.954,20-20C512,244.954,503.046,236,492,236z" />
 | 
			
		||||
                           </g>
 | 
			
		||||
                       </svg>
 | 
			
		||||
                   </div>
 | 
			
		||||
                   <span class="LP-Text">Album hinzufügen</span></a></li>
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    </article>
 | 
			
		||||
    <article class="">
 | 
			
		||||
        <h2 class="LP-Headline LP-Headline">Bilder</h2>
 | 
			
		||||
        <div class=" LP-Content">
 | 
			
		||||
            <ul class="LP-PlaceOverView__ImageList">
 | 
			
		||||
                {% for place_image in place.images.all %}
 | 
			
		||||
                <li class="LP-PlaceOverView__ImageItem">
 | 
			
		||||
                    <a href="{{ place_image.filename.url_large }}"> <img src="{{ place_image.filename.url_thumbnail }}"></a>
 | 
			
		||||
                </li>
 | 
			
		||||
                {% endfor %}
 | 
			
		||||
            </ul>
 | 
			
		||||
	</article>
 | 
			
		||||
    <article class="LP-Section">
 | 
			
		||||
        <h1 class="LP-Headline LP-Headline">Bilder</h1>
 | 
			
		||||
        <div class="LP-Content__Wrapper">
 | 
			
		||||
            <div class=" LP-Content">
 | 
			
		||||
                <ul class="LP-PlaceOverView__ImageList">
 | 
			
		||||
					{% for place_image in place.images.all %}
 | 
			
		||||
                    <li class="LP-PlaceOverView__ImageItem">
 | 
			
		||||
                        <a href="{{ place_image.filename.large.url }}" class="LP-Link"><img class="LP-Image" src="{{ place_image.filename.thumbnail.url }}"></a>
 | 
			
		||||
					</li>
 | 
			
		||||
					{% endfor %}
 | 
			
		||||
                </ul>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </article>
 | 
			
		||||
</article>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,48 @@
 | 
			
		||||
{% extends 'global.html'%}
 | 
			
		||||
{% load static %}
 | 
			
		||||
 | 
			
		||||
# {% block title %}Place erstellen{% endblock %}
 | 
			
		||||
# {% block title %}Place aktualisieren{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block maincontent %}
 | 
			
		||||
<form class="LP-Form" method="POST" enctype="multipart/form-data">
 | 
			
		||||
	<fieldset class="LP-Form__Fieldset">
 | 
			
		||||
		<legend class="LP-Form__Legend">Place aktualisieren</legend>
 | 
			
		||||
		{% csrf_token %}
 | 
			
		||||
		<div class="LP-Form__Composition LP-Form__Composition--breakable">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.name %}
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.location %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition LP-Form__Composition--breakable">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.latitude %}
 | 
			
		||||
			</div>
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.longitude %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.description %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<div class="LP-Form__Field">
 | 
			
		||||
				{% include 'partials/form/inputField.html' with field=form.filename %}
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="LP-Form__Composition">
 | 
			
		||||
			<input type="submit" class="LP-Button" value="Abschicken"/>
 | 
			
		||||
		</div>
 | 
			
		||||
	</fieldset>
 | 
			
		||||
 | 
			
		||||
<h2>Place aktualisieren</h2>
 | 
			
		||||
<form method="post" enctype="multipart/form-data">
 | 
			
		||||
  {% csrf_token %}
 | 
			
		||||
  {{ form.as_p }}
 | 
			
		||||
  <button type="submit">Abschicken</button>
 | 
			
		||||
</form>
 | 
			
		||||
 | 
			
		||||
{% endblock maincontent %}
 | 
			
		||||
		Reference in New Issue
	
	Block a user