Skip to content

Instantly share code, notes, and snippets.

@KalobTaulien
Created February 8, 2019 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KalobTaulien/be41cda840c91d1e904e887e76177ac1 to your computer and use it in GitHub Desktop.
Save KalobTaulien/be41cda840c91d1e904e887e76177ac1 to your computer and use it in GitHub Desktop.
The settings file for social media settings. Tutorial at https://learnwagtail.com/tutorials/adding-global-site-settings-your-wagtail-website/
#site_settings/models.py
from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, MultiFieldPanel
from wagtail.contrib.settings.models import BaseSetting, register_setting
@register_setting
class SocialMediaSettings(BaseSetting):
"""Social media settings for our custom website."""
facebook = models.URLField(blank=True, null=True, help_text="Facebook URL")
twitter = models.URLField(blank=True, null=True, help_text="Twitter URL")
youtube = models.URLField(blank=True, null=True, help_text="YouTube Channel URL")
panels = [
MultiFieldPanel([
FieldPanel("facebook"),
FieldPanel("twitter"),
FieldPanel("youtube"),
], heading="Social Media Settings")
]
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
{% if settings.site_settings.SocialMediaSettings.facebook %}
<a href="{{ settings.site_settings.SocialMediaSettings.facebook }}">
<i class="fab fa-facebook-f"></i>
</a>
{% endif %}
{% if settings.site_settings.SocialMediaSettings.twitter %}
<a href="{{ settings.site_settings.SocialMediaSettings.twitter }}">
<i class="fab fa-twitter"></i>
</a>
{% endif %}
{% if settings.site_settings.SocialMediaSettings.youtube %}
<a href="{{ settings.site_settings.SocialMediaSettings.youtube }}">
<i class="fab fa-youtube"></i>
</a>
{% endif %}
</div>
</div>
</div>
@KalobTaulien
Copy link
Author

Copy link

ghost commented Dec 15, 2022

Hii I used ClusterableModel, and Orderable in register_setting but I can't able to render the data please help me to render the data from this ClusterableModel and I would like to render any template in the project

my render code

home/home_page.html
{% for item in self.Social_Media.all %}
{{item.Name}}
{{item.url}}
{% endfor %}

social_media/models.py

from django.db import models
from wagtail.admin.edit_handlers import FieldPanel, InlinePanel, MultiFieldPanel
from wagtail.contrib.settings.models import BaseSiteSetting, register_setting
from wagtail.core.models import Orderable
from modelcluster.models import ClusterableModel

from modelcluster.fields import ParentalKey

@register_setting(icon='chain-broken')
class SocialMediaSettings(ClusterableModel, BaseSiteSetting):

panels = [
    MultiFieldPanel([
        InlinePanel('Social_Media', label="Name & URL"),
    ], heading="Social Media accounts")
    
]

class Meta:
    verbose_name = 'social media'

class SocialMediaNameUrl(Orderable):

page = ParentalKey("social_media.SocialMediaSettings", related_name="Social_Media")
name = models.CharField(
    max_length=255, help_text='Your Social media name, like instagram, facebook....')
url = models.URLField(
    help_text='Your user account URL')

panels = [
    MultiFieldPanel([
        FieldPanel("name"),
        FieldPanel("url"),
    ])
    
]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment