from django.http import HttpResponseRedirect, HttpResponsePermanentRedirect
from django.http import HttpResponse, Http404
from pgweb.util.decorators import login_required, allow_frames, content_sources
+from django.template.defaultfilters import strip_tags
from django.db.models import Q
from django.conf import settings
params=[fullname, fullname, fullname],
).order_by('-version__supported', 'version').only('version', 'file')
+ # If possible (e.g. if we match), remove the header part of the docs so that we can generate a plain text
+ # preview. For older versions where this doesn't match, we just leave it empty.
+ m = re.match(r'^<div [^>]*class="navheader"[^>]*>.*?</div>(.*)$', page.content, re.S)
+ if m:
+ contentpreview = strip_tags(m.group(1))
+ else:
+ contentpreview = ''
+
return render(request, 'docs/docspage.html', {
'page': page,
'supported_versions': [v for v in versions if v.version.supported],
'title': page.title,
'doc_index_filename': indexname,
'loaddate': loaddate,
+ 'og': {
+ 'url': '/docs/{}/{}'.format(page.display_version(), page.file),
+ 'time': page.version.docsloaded,
+ 'title': page.title.strip(),
+ 'description': contentpreview,
+ 'sitename': 'PostgreSQL Documentation',
+ }
})
news = get_object_or_404(NewsArticle, pk=itemid)
if news.modstate != ModerationState.APPROVED:
raise Http404
+
+ fullurl = '/about/news/{}-{}/'.format(slugify(news.title), news.id)
if slug != slugify(news.title):
- return HttpResponsePermanentRedirect('/about/news/{}-{}/'.format(slugify(news.title), news.id))
+ return HttpResponsePermanentRedirect(fullurl)
+
return render_pgweb(request, 'about', 'news/item.html', {
'obj': news,
'newstags': NewsTag.objects.all(),
+ 'og': {
+ 'url': fullurl,
+ 'author': news.org.name if news.org.name != '_migrated' else '',
+ 'time': datetime.datetime.combine(news.date, datetime.datetime.min.time()),
+ 'title': news.title,
+ 'description': news.content,
+ 'noimage': news.org.mailtemplate == 'default', # For now, control image by "using a custom logo"
+ 'sitename': 'PostgreSQL News',
+ }
})
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
{%block meta%}{%endblock%} {# used for custom meta tags such as description which we don't want for every page #}
<meta name="theme-color" content="#336791"/>
- <meta name="copyright" content="The PostgreSQL Global Development Group" />
+ <meta name="copyright" content="The PostgreSQL Global Development Group" />{%if og%}
+ <meta property="og:url" content="https://www.postgresql.org{{og.url}}" />
+ <meta property="og:type" content="article" />
+{%if og.author%} <meta property="article:author" content="{{og.author}}" />{%endif%}
+ <meta property="article:published_time" content="{{og.time|date:"c"}}" />
+{%if not og.noimage%} <meta property="og:image" content="https://www.postgresql.org/media/img/about/press/elephant.png" />{%endif%}
+ <meta property="og:title" content="{{og.title}}" />
+ <meta property="og:description" content="{{og.description|truncatewords:"20"}}" />
+ <meta property="og:site_name" content="{{og.sitename|default:"PostgreSQL"}}" />{%endif%}
<link href="/media/css/fontawesome.css?{{gitrev}}" rel="stylesheet">
<link rel="stylesheet" href="/media/css/bootstrap-4.4.1.min.css">
<link rel="shortcut icon" href="/favicon.ico" />
<meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
{%block meta%}{%endblock%} {# used for custom meta tags such as description which we don't want for every page #}
<meta name="theme-color" content="#336791"/>
- <meta name="copyright" content="The PostgreSQL Global Development Group" />
+ <meta name="copyright" content="The PostgreSQL Global Development Group" />{%if og%}
+ <meta property="og:url" content="https://www.postgresql.org{{og.url}}" />
+ <meta property="og:type" content="article" />
+ <meta property="article:published_time" content="{{og.time|date:"c"}}" />
+{%if not og.noimage%} <meta property="og:image" content="https://www.postgresql.org/media/img/about/press/elephant.png" />{%endif%}
+ <meta property="og:title" content="{{og.title}}" />
+{%if og.description%} <meta property="og:description" content="{{og.description|truncatewords:"20"}}" />{%endif%}
+ <meta property="og:site_name" content="{{og.sitename|default:"PostgreSQL"}}" />{%endif%}
<link href="/media/css/fontawesome.css?{{gitrev}}" rel="stylesheet">
<link rel="stylesheet" href="/media/css/bootstrap-4.4.1.min.css">
<link rel="shortcut icon" href="/favicon.ico" />