summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluxagraf <sng@luxagraf.net>2023-12-19 12:13:02 -0500
committerluxagraf <sng@luxagraf.net>2023-12-19 12:13:02 -0500
commita9372a44b7249f5420cee82fd730627a5dc5f882 (patch)
treeb5e1c5b1e483f470e347e935f68467d586bb9fa4
parent6d6c2d29808dab7a755021c831b4aa95bf18c7a2 (diff)
guides: built out publishing system for darktable guides
-rw-r--r--app/posts/build.py2
-rw-r--r--app/posts/models.py2
-rw-r--r--app/posts/templates/posts/guide_base.html27
-rw-r--r--app/posts/templates/posts/guide_detail.html222
-rw-r--r--app/posts/urls/guide_urls.py5
-rw-r--r--app/posts/views/guide_views.py61
-rw-r--r--config/base_urls.py6
-rw-r--r--templates/admin/index.html3
8 files changed, 113 insertions, 215 deletions
diff --git a/app/posts/build.py b/app/posts/build.py
index 0ba7e05..1b21666 100644
--- a/app/posts/build.py
+++ b/app/posts/build.py
@@ -25,7 +25,7 @@ class BuildSrc(BuildNew):
class BuildGuide(BuildNew):
def get_model_queryset(self):
- return self.model.objects.filter(post_type__in=[PostType.FIELD_TEST, PostType.REVIEW]).filter(status__exact=1).order_by('-pub_date')
+ return self.model.objects.filter(post_type__in=[PostType.GUIDE, PostType.REVIEW]).filter(status__exact=1).order_by('-pub_date')
def build(self):
self.build_list_view(
diff --git a/app/posts/models.py b/app/posts/models.py
index 93d686a..2ad995d 100644
--- a/app/posts/models.py
+++ b/app/posts/models.py
@@ -145,6 +145,8 @@ class Post(models.Model):
return reverse('src:detail', kwargs={"slug": self.slug})
if self.post_type == PostType.FIELD_NOTE:
return reverse('fieldnote:detail', kwargs={"year": self.pub_date.year, "month": self.pub_date.strftime("%m"), "slug": self.slug})
+ if self.post_type == PostType.GUIDE:
+ return reverse('guides:guide-detail', kwargs={"topic": str(self.topics.all()[0]).lower(), "slug": self.slug})
if self.post_type == PostType.JRNL:
return reverse('jrnl:detail', kwargs={"year": self.pub_date.year, "month": self.pub_date.strftime("%m"), "slug": self.slug})
diff --git a/app/posts/templates/posts/guide_base.html b/app/posts/templates/posts/guide_base.html
index 0f1f482..aef4cf0 100644
--- a/app/posts/templates/posts/guide_base.html
+++ b/app/posts/templates/posts/guide_base.html
@@ -5,19 +5,27 @@
{% block pagetitle %}Advice, Tools, Tips, and Tricks for Full Time Van or RV Life.{% endblock %}
{% block metadescription %}Guides for fellow travelers: tools, tips, and tricks to make life on the road in an RV or Van easier and more enjoyable.{% endblock %}
-{% block primary %}<ul class="bl" id="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
- <li><a href="/" title="luxagraf homepage" itemprop="url"><span itemprop="title">Home</span></a> &rarr; </li>
- <li itemprop="title">guide</li>
- </ul>
+{% block primary %}
<main role="main" id="guide-archive" class="archive-list">
<div class="archive-intro">
- <h2 class="post-title">Roaming Guide</h2>
- <h3 class="post-subtitle">Advice, Tools, Tips, and Tricks for Full Time Van or RV Life.</h3>
- <p>I don't want to tell you how to travel. Everyone is different. Besides, even after twenty some odd years of travel, I am still learning. </p>
+ <h2 class="post-title">Guides and How-Tos</h2>
+ <h3 class="post-subtitle">Advice, Tools, Tips, and Tricks for Life.</h3>
+ <p>I don't know how many of these I'll do, but I wanted to have a place to share some things I've learned, so I made this page. So far, just some thoughts on photography and how to use the Darktable image editor.</p>
+
+ {%comment%}<p>I don't want to tell you how to travel. Everyone is different. Besides, even after twenty some odd years of travel, I am still learning. </p>
<p>I've always been most inspired by wandering monks and nuns, those who walked or sailed with next to nothing and survived. Mostly. Today most of us are not that skilled or strong of will, but keeping that example in mind is helpful. The less stuff you travel with the better off you are. Up to a point. Having the right tools is important. The right tools make life easier and more fun.</p>
- <p>I put this together to help you find the tools you need. These aren't casual reviews. These are things I have spent years seeking out, using, and refining. In the end what you need are not things, but strategies and tools that allow you to create solutions to problems. </p>
+ <p>I put this together to help you find the tools you need. These aren't casual reviews. These are things I have spent years seeking out, using, and refining. In the end what you need are not things, but strategies and tools that allow you to create solutions to problems. </p>{%endcomment%}
</div>
- <h1 class="archive-hed">Reviews</h1>
+ <ul class="archive-list">
+ <li class="h-entry hentry archive-list-card archive-list-card-sm" itemscope itemType="http://schema.org/Article">
+ <span class="date dt-published card-smcaps">{% now "F Y" %}</span>
+ <a href="/guide/photography/">
+ <h2 class="card-hed">Photography</h2>
+ <p class="p-summary card-lede">Thoughts on photography and how to edit images with Darktable</p>
+ </a>
+ </li>
+ </ul>
+ {% comment %}
{% autopaginate object_list 30 %}
<ul class="article-card-list article-card-list-circle">{% for object in object_list %}
<li class="h-entry hentry card-cir-mini-image" itemscope itemType="http://schema.org/Article">
@@ -37,5 +45,6 @@
</h4>{% endif %}
</li>
{%endfor%}</ul>
+ {% endcomment %}
</main>
{%endblock%}
diff --git a/app/posts/templates/posts/guide_detail.html b/app/posts/templates/posts/guide_detail.html
index 998d6ce..ee1908e 100644
--- a/app/posts/templates/posts/guide_detail.html
+++ b/app/posts/templates/posts/guide_detail.html
@@ -10,178 +10,96 @@
<link rel="stylesheet" href="/media/src/solarized.css" type="text/css" media="screen"/>
{%endif %}
<link rel="canonical" href="https://luxagraf.net{{object.get_absolute_url}}" />
- <meta property="og:type" content="article" />
- <meta property="og:title" content="{{object.title|safe}}" />
- <meta property="og:url" content="https://luxagraf.net{{object.get_absolute_url}}" />
- <meta property="og:description" content="{% if object.meta_description %}{{object.meta_description}}{%else%}{{object.subtitle}}{%endif%}" />
- <meta property="article:published_time" content="{{object.pub_date|date:'c'}}" />
- <meta property="article:author" content="Scott Gilbertson" />
- <meta property="og:site_name" content="Luxagraf" />
- <meta property="og:image" content="{{self.get_featured_image}}" />
- <meta property="og:locale" content="en_US" />
- <meta name="twitter:card" content="summary_large_image"/>
- <meta name="twitter:description" content="{% if object.meta_description %}{{object.meta_description}}{%else%}{{object.subtitle}}{%endif%}"/>
- <meta name="twitter:title" content="{{object.title|safe}}"/>
- <meta name="twitter:site" content="@luxagraf"/>
- <meta name="twitter:domain" content="luxagraf"/>{% if object.featured_image %}
- <meta name="twitter:image:src" content="{{object.featured_image.get_image_url}}"/>{%endif%}
- <meta name="twitter:creator" content="@luxagraf"/>
{%endblock%}
-
-{%block bodyid %}{% if object.get_post_type_display == 'tools' %}class="src"{% endif %}{%endblock%}
-
-{% block primary %}
- <main>
- <ul class="bl" id="breadcrumbs" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
- <li><a href="/" title="luxagraf homepage" itemprop="url"><span itemprop="title">Home</span></a> &rarr; </li>
- <li><a href="/field-tests/" title="Advice, Tools, Tips and Tricks for Full Time Van, RV, and School Bus Life." itemprop="url"> <span itemprop="title">Field-Tests</span></a> &rarr; </li>
- <li itemprop="title">{{object.short_title|smartypants|safe}}</li>
- </ul>
- <article class="h-entry hentry" itemscope itemType="http://schema.org/Article">
- <span class="hide" itemprop="author" itemscope itemtype="http://schema.org/Person">by
- <a class="p-author h-card" href="/about"><span itemprop="name">Scott Gilbertson</span></a>
+{% block breadcrumbs %}
+<nav class="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">
+ <span class="nav-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <a href="/" itemprop="name">Home</a>
+ <meta itemprop="position" content="1" />
</span>
- <meta itemprop="image" content="https://images.luxagraf.net/header.gif" /> <!--{{self.featured_image.url}}" />-->
+ <span class="nav-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <a href="{% url 'guides:guide-base' %}" itemprop="name">Guides</a>
+ <meta itemprop="position" content="2" />
+ </span>
+ <span class="nav-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
+ <span itemprop="name">{{topic}}</span>
+ <meta itemprop="position" content="3" />
+ </span>
+ </nav>
+{% endblock %}
+ {% block primary %}<main>
+ <article class="h-entry hentry entry-content content" itemscope itemType="http://schema.org/BlogPosting">
<header id="header" class="post-header">
<h1 class="p-name post-title" itemprop="headline">{{object.title|smartypants|safe}}</h1>
- <h2 class="post-subtitle">{{object.subtitle|smartypants|safe}}</h2>
- <div class="post-linewrapper">
- {% if object.originally_published_by %}<h4 class="post-source">Originally Published By: <a href="{{object.originally_published_by_url}}" title="View {{object.title}} on {{object.originally_published_by}}">{{object.originally_published_by}}</a></h4>{%endif%}
- {% if object.location %}<div class="p-location h-adr adr post-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
- <h3 class="h-adr" itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">{% if object.location.country_name == "United States" %}<span class="p-locality locality" itemprop="addressLocality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name|safe}}</a>, <span class="p-country-name" itemprop="addressCountry">U.S.</span>{%else%}<span class="p-region" itemprop="addressRegion">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}"><span itemprop="addressCountry">{{object.location.country_name|safe}}</span></a>{%endif%}</h3>
- &ndash;&nbsp;<a href="" onclick="showMap({{object.latitude}}, {{object.longitude}}, { type:'point', lat:'{{object.latitude}}', lon:'{{object.longitude}}'}); return false;" title="see a map">Map</a>
+ {% if object.subtitle %}<h2 class="post-subtitle">{{object.subtitle|smartypants|safe}}</h2>{%endif%}
+ <div class="post-dateline">
+ {% if object.location %}<div class="p-location h-adr adr post-location">
+ <span class="h-adr">{% if object.location.country_name == "United States" %}
+ <span class="p-locality locality">{{object.location.name|smartypants|safe}}</span>, <a class="p-region region" href="/jrnl/united-states/" title="travel writing from the United States">{{object.location.state_name|safe}}</a>, <span class="p-country-name">U.S.</span>{%else%}
+ <span class="p-region">{{object.location.name|smartypants|safe}}</span>, <a class="p-country-name country-name" href="/jrnl/{{object.location.country_slug}}/" title="travel writing from {{object.location.country_name}}">{{object.location.country_name|safe}}</a>{%endif%}
+ </span>
+ &ndash;&nbsp;<span id="mapbtn" data-clat="{{object.latitude}}" data-clon="{{object.longitude}}" data-type="point" data-latitude="{{object.latitude}}" data-longitude="{{object.longitude}}">Map</a>
</div>{%endif%}
- <h3 class="post-location">Filed Under: <a href="/guides/">Guides</a>, {% for topic in object.topics.all %}<a href="/guides/topic/{{topic.slug}}">{{topic}}</a>{%endfor%}</h3>
- <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">Last Updated: {{object.last_updated|date:"F"}} <span>{{object.last_updated|date:"j, Y"}}</span></time>
+ <time class="dt-published published dt-updated post-date" datetime="{{object.pub_date|date:'c'}}" itemprop="datePublished">{{object.pub_date|date:"F"}} <span>{{object.pub_date|date:"j, Y"}}</span></time>
+ <span class="hide">by <a class="p-author h-card" href="/about">Scott Gilbertson</a></span>
</div>
</header>
- <div id="article" class="e-content entry-content post-body post-guide" itemprop="articleBody">
- {% if object.preamble %}<div class="afterward">
- {{object.preamble_html|smartypants|safe}}
- </div>{%endif%}
- {{object.body_html|safe|smartypants}}
+ <div class="e-content entry-content post-body" itemprop="articleBody">
+ {{object.body_html|safe|smartypants}}
+ </div>
+ <div class="entry-footer">
+ <aside>
+ <h4>This is part of a series of posts on {{topic|lower}}, you can <a href="{% url 'guides:guides-by-topic' topic|lower %}">read the rest here</a>.</h4>
+ </aside>
</div>
- {% if object.afterword_html %}<div class="afterward">
- <h4>Afterward</h4>
- {{object.afterword_html|smartypants|safe}}
+ </article>
+ {% if object.related.all %}<div class="article-afterward related">
+ <div class="related-bottom">
+ <h6 class="hedtinycaps">You might also enjoy</h6>
+ <div class="archive-grid-quad">{% for object in related %}
+ <div class="archive-grid-card archive-grid-card-simple h-entry">
+ <a href="{{object.get_absolute_url}}" title="{{object.title}}">
+ <div class="card-image-tiny">
+ {% if object.featured_image %}
+ {% include "lib/img_archive.html" with image=object.featured_image nolightbox=True %}
+ {%endif%}
+ </div>
+ <h4 class="p-name card-hed" itemprop="headline">{% if object.title %}{{object.title|safe|smartypants|widont}}{% else %}{{object.common_name}}{%endif%}</h4>
+ <p class="p-author author hide" ><span class="byline-author">Scott Gilbertson</span></p>
+ <span class="card-smcaps">
+ {% if object.location %}<span class="p-location h-adr adr card-location" itemprop="contentLocation" itemscope itemtype="http://schema.org/Place">
+ {% if object.location.country_name == "United States" %}{{object.location.state_name}}{%else%}{{object.location.country_name}}{%endif%}
+ </span>{%endif%}
+ {% if object.location and object.model_name.model != 'page' %}&ndash;{%endif%}
+ {% if object.model_name.model != 'page' %}<time class="dt-published published dt-updated" datetime="{{object.pub_date|date:'c'}}"><span>{{object.pub_date|date:" Y"}}</span></time>{%endif%}
+ </span>
+ </a>
+ </div>
+ {% endfor %}</div>
+ </div>
</div>{%endif%}
- {%if wildlife or object.field_notes.all or object.books.all %}<div class="entry-footer">{%if wildlife %}
- <aside id="wildlife">
- <h3>Fauna and Flora</h3>
- {% regroup wildlife by ap.apclass.get_kind_display as wildlife_list %}
- <ul>
- {% for object_list in wildlife_list %}
- <li class="grouper">{{object_list.grouper}}<ul>
- {% for object in object_list.list %}
- <li>{%if object.ap.body_markdown%}<a href="{% url 'sightings:detail' object.ap.slug %}">{{object}}</a>{%else%}{{object}}{%endif%} </li>
- {% endfor %}</ul>
- {% endfor %}</ul>
+ <aside class="narrow join mailing-list--wrapper">
+ <h6 class="hedtinycaps">If you enjoyed this, you might like <em><a href="/range/">Range</a></em>, A photography (sometimes) newsletter</h6>
+ <iframe target='_parent' style="border:none !important; background:white; width:100% !important;" title="embedded form for subscribing the the Range newsletter" src="{% url 'lttr:subscribe' slug='range' %}"></iframe>
</aside>
- {% endif %}{%if object.field_notes.all %}
- <aside {% if wildlife %}class="margin-left-none" {%endif%}id="field_notes">
- <h3>Field Notes</h3>
- <ul>{% for obj in object.field_notes.all %}
- <li><a href="{% url 'fieldnotes:detail' year=obj.pub_date.year month=obj.pub_date|date:"m" slug=obj.slug %}">{{obj}}</a></li>
- {% endfor %}</ul>
- </aside>{% endif %}
- {%if object.books.all %}
- <aside id="recommended-reading" {%if object.field_notes.all and wildlife %}class="rr-clear{%endif%}" >
- <h3>Recommended Reading</h3>
- <ul>{% for obj in object.books.all %}
- <li><a href="{% url 'books:detail' slug=obj.slug %}"><img src="{{obj.get_small_image_url}}" /></a></li>
- {% endfor %}</ul>
- </aside>{% endif %}
- </div>{%endif%}
- </article>
-
- {% comment %} <div class="mailing-list--wrapper">
- <h5>If you enjoyed this, you should join the mailing&nbsp;list&hellip;</h5>
- {% include 'mailing_list.html' %}
- </div> {% endcomment %}
- </main>
{% if object.enable_comments %}
{% get_comment_count for object as comment_count %}
{%if comment_count > 0 %}
-<p class="comments--header">{{comment_count}} Comment{{ comment_count|pluralize }}</p>
+<div class="comment-wrapper">
+<p class="comments-header">{{comment_count}} Comment{{ comment_count|pluralize }}</p>
{% render_comment_list for object %}
{%endif%}
-<div class="comment--form--wrapper {%if comment_count > 0%}comment-form-border{%endif%}">
+<div class="comment-form-wrapper {%if comment_count > 0%}comment-form-border{%endif%}">
{% render_comment_form for object %}
</div>
{% else %}
<p class="comments--header" style="text-align: center">Sorry, comments have been disabled for this post.</p>
{%endif%}
+</div>
+</main>
{% endblock %}
{% block js %}
-<script type="text/javascript">
-document.addEventListener("DOMContentLoaded", function(event) {
- var leaflet = document.createElement('script');
- leaflet.src = "/media/js/leaflet-master/leaflet-mod.js";
- document.body.appendChild(leaflet);
- var lightbox = document.createElement('script');
- lightbox.src = "/media/js/lightbox.js";
- document.body.appendChild(lightbox);
- leaflet.onload = function(){
- var detail = document.createElement('script');
- detail.src = "/media/js/detail.min.js";
- document.body.appendChild(detail);
- {% with object.get_template_name_display as t %}{%if t == "single" or t == "single-dark" %}
- detail.onload = function(){
- createMap();
- var open = false;
- }
- {%endif%}{%endwith%}
- }
-
- lightbox.onload = function() {
- var opts= {
- //nextOnClick: false,
- captions: true,
- onload: function(){
- var im = document.getElementById("jslghtbx-contentwrapper");
- var link = im.appendChild(document.createElement('a'))
- link.href = im.firstChild.src;
- link.innerHTML= "open ";
- link.target = "_blank";
- link.setAttribute('class', 'p-link');
- im.appendChild(link);
- }
- };
- var lightbox = new Lightbox();
- lightbox.load(opts);
- }
- {% if object.enable_comments %}
-{% get_comment_count for object as comment_count %}
-{%if comment_count > 0 %}
- //delay loading of gravatar images using noscript data-hash attribute
- dataattr = document.getElementsByClassName("datahashloader");
- for(var i=0; i<dataattr.length; i++) {
- var c = dataattr[i].parentNode;
- var img = document.createElement("img");
- img.src = 'https://images.luxagraf.net/gravcache/' + dataattr[i].getAttribute('data-hash') + '.jpg';
- img.className += "gravatar";
- c.insertBefore(img, c.childNodes[3]);
- }
-{%endif%}
-{%endif%}
-{% if object.has_video %}
-var tester = document.getElementsByClassName("vidauto");
-var wrapper = document.getElementById('wrapper');
-var dist = 100;
-
-window.onscroll = function() {
- for (var i=0; i<tester.length; i++) {
- checkVisible(tester[i]) ? tester[i].play() : tester[i].pause();
- }
-};
-
-function checkVisible(elm) {
- var rect = elm.getBoundingClientRect();
- var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
- return !(rect.bottom < 0 || rect.top - viewHeight >= 0);
-}
-{%endif%}
-
-});
-</script>
+<script src="/media/js/leaflet-master/leaflet-mod.js"></script>
+<script src="/media/js/detail.min.js"></script>
+{{ block.super }}
{%endblock%}
diff --git a/app/posts/urls/guide_urls.py b/app/posts/urls/guide_urls.py
index 47cc3c5..f3891e3 100644
--- a/app/posts/urls/guide_urls.py
+++ b/app/posts/urls/guide_urls.py
@@ -18,4 +18,9 @@ urlpatterns = [
{'page':1},
name="guides-by-topic"
),
+ path(
+ r'<str:topic>/<str:slug>',
+ views.GuideDetailView.as_view(),
+ name="guide-detail"
+ ),
]
diff --git a/app/posts/views/guide_views.py b/app/posts/views/guide_views.py
index 346fcc7..a4ff873 100644
--- a/app/posts/views/guide_views.py
+++ b/app/posts/views/guide_views.py
@@ -1,6 +1,7 @@
from django.views.generic import ListView
from django.views.generic.detail import DetailView
from django.contrib.syndication.views import Feed
+from django.urls import reverse
from django.apps import apps
from django.conf import settings
@@ -19,7 +20,7 @@ class GuideListView(PaginatedListView):
def get_queryset(self):
queryset = super(GuideListView, self).get_queryset()
- return queryset.filter(status__exact=1).filter(post_type__in=[PostType.REVIEW,PostType.FIELD_TEST]).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image')
+ return queryset.filter(status__exact=1).filter(post_type__in=[PostType.REVIEW,PostType.GUIDE]).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image')
class GuideTopicListView(PaginatedListView):
@@ -39,63 +40,25 @@ class GuideTopicListView(PaginatedListView):
topic = Category.objects.get(slug=self.kwargs['topic'])
context['topic'] = topic
context['breadcrumbs'] = ('Guides', topic.name )
-
+ context['crumb_url'] = reverse('guides:guide-base')
Category.objects.get(slug=self.kwargs['topic'])
return context
-class ReviewsListView(GuideListView):
- template_name = "posts/post.html"
-
- def get_queryset(self):
- queryset = super(ReviewsListView, self).get_queryset()
- return queryset.filter(post_type__in=[0,1]).filter(status__exact=1).order_by('-pub_date').prefetch_related('location').prefetch_related('featured_image')
-
- def get_context_data(self, **kwargs):
- context = super(ReviewsListView, self).get_context_data(**kwargs)
- context['archive_type'] = 'Field Tests'
- return context
-
-
-class PostDetailView(LuxDetailView):
+class GuideDetailView(LuxDetailView):
model = Post
slug_field = "slug"
- def get_queryset(self):
- queryset = super(PostDetailView, self).get_queryset()
- return queryset.select_related('location').prefetch_related('field_notes')
-
- def get_context_data(self, **kwargs):
- context = super(PostDetailView, self).get_context_data(**kwargs)
- related = []
- for obj in self.object.related.all():
- model = apps.get_model(obj.model_name.app_label, obj.model_name.model)
- related.append(model.objects.get(slug=obj.slug, pub_date=obj.pub_date))
- context['related'] = related
- return context
-
def get_template_names(self):
obj = self.get_object()
return ["posts/%s_detail.html" % obj.get_post_type_display(), 'posts/post_detail.html']
-
-class PostDetailViewTXT(PostDetailView):
- template_name = "posts/entry_detail.txt"
-
-
-class PostsRSSFeedView(Feed):
- title = "VanLifeReviews.com: "
- link = "/"
- description = "Latest reviews, stories and guides"
- description_template = 'feeds/blog_description.html'
-
- def items(self):
- return Post.objects.filter(status__exact=1).order_by('-pub_date')[:10]
-
- def item_pubdate(self, item):
- """
- Takes an item, as returned by items(), and returns the item's
- pubdate.
- """
- return item.pub_date
+ def get_context_data(self, **kwargs):
+ context = super(GuideDetailView, self).get_context_data(**kwargs)
+ print(self.kwargs['topic'])
+ topic = Category.objects.get(slug=self.kwargs['topic'])
+ context['topic'] = topic
+ context['breadcrumbs'] = ('Guides', topic.name )
+ context['crumb_url'] = reverse('guides:guide-base')
+ return context
diff --git a/config/base_urls.py b/config/base_urls.py
index 67ce345..f371ba7 100644
--- a/config/base_urls.py
+++ b/config/base_urls.py
@@ -57,9 +57,9 @@ urlpatterns = [
#path(r'review/', include('posts.urls.review_urls')),
#re_path(r'^review/$', RedirectView.as_view(url='/reviews/')),
#path(r'reviews/', include('posts.urls.review_urls', namespace='review-list')),
- #path(r'guide/', include('posts.urls.guide_urls')),
- #re_path(r'^guide/$', RedirectView.as_view(url='/guides/')),
- #path(r'guides/', include('posts.urls.guide_urls', namespace='guide-list')),
+ re_path(r'^guide/$', RedirectView.as_view(url='/guides/')),
+ path(r'guides/', include('posts.urls.guide_urls', namespace='guides')),
+ path(r'guide/', include('posts.urls.guide_urls')),
re_path(r'^essay/$', RedirectView.as_view(url='/essays/')),
path(r'essay/', include('posts.urls.essay_urls')),
path(r'essays/', include('posts.urls.essay_urls', namespace='essay-list')),
diff --git a/templates/admin/index.html b/templates/admin/index.html
index 91678f6..c1fade6 100644
--- a/templates/admin/index.html
+++ b/templates/admin/index.html
@@ -53,6 +53,7 @@ td, th {
<li><a href="/admin/build/build?id=buildbooks">Build Books</a></li>
<li><a href="/admin/build/build?id=pubs">Build Publications</a></li>
<li><a href="/admin/build/build?id=resume">Build Resume</a></li>
+ <li><a href="/admin/build/build?id=discursivepages">Build Discursive Pages</a></li>
</ul>
{% if app_list %}
<div class="module">
@@ -120,7 +121,7 @@ td, th {
<tr>
<th scope="row"><a href="/admin/links/link/">link</a></th>
<td><a href="/admin/links/link/add/" class="addlink">Add</a></td>
- <td><a href="/admin/build/build?id=discursivepages">Build Discursive Pages</a></td>
+ <td><a href="/admin/build/build?id=guide">Build Guides</a></td>
</tr>
</table>
</div>