Hello Tom,
I have not understood your question well, but I will try to help you
understand how works your example.
1. Your model inherits the Displayable class, therefore there will be a
slug field in the respective database table. Take a look at the table of
your model in the database and you can see the slug field.
2. In the model you have declared the absolute url, where you specify the
name of the urlpattern (project_detail) that must be used and the parameter
that must be passed to it (slug).
3. In the urlpattern you have specified the view that must be called to
process that request.
4. Then, in the view method (def project_detail(...)) called through the
urlpatthern, you have declared that this method expects the slug parameter
and you have declared the template that will be used
(template="projects/project_detail.html").
5. Queryset is created through get_object_or_404, which in this case would
be something like this:
"SELECT * FROM yourapp_projectlinkpage WHERE slug='some-slug' AND status=2"
6. The view gives the specified template the context with the instance
obtained through the queryset.
7. Template render the page with the instance that has been passed in the
context.
An observation about the view method. In the templates variable declaration
you should substituting "projects/project_detail /% s.html" with
"projects/project_detail_% s.html"
8. The content you have written when you have created a project through the
admin interface, will be rendered by the template through the tag {{
project.content }}
Il giorno domenica 5 novembre 2017 00:35:50 UTC+1, Tom Tanner ha scritto:
>
> Hey everyone,
>
> When I go to `http://127.0.0.1:8000/projects/some-slug`
> <http://127.0.0.1:8000/projects/some-slug>, I want Mezzanine to fetch the
> `project_detail.html` template, which would include `some-slug.html`. How
> do I do this?
>
> Here's `urls.py`.
> url("^projects/(?P<slug>.*)%s$" % _slash, project_detail, name=
> "project_detail"),
>
>
>
> `models.py`.
> class ProjectLinkPage(Displayable)
> '''
> A page representing the format of the page that
> has links to standalone, projectlink projectlinks
> '''
>
>
> # Fields and `class Meta`, etc...
>
>
> @models.permalink
> def get_absolute_url(self):
> return ("project_detail", (), {"slug": self.slug})
>
>
> `views.py`
> def project_detail(request, slug, template="projects/project_detail.html",
> extra_context=None):
> '''
> Custom templates are checked for by using the name
> `projects/project_detail/XXX.html`` where `XXX` is the project slug.
> '''
>
>
> project = get_object_or_404(Project, slug=slug, status=2)
> context = {
> "project": project,
> "editable_obj": project
> }
> context.update(extra_context or {})
> templates = [u"projects/project_detail/%s.html" % str(slug), template]
> return TemplateResponse(request, templates, context)
>
> `project_detail.html`
> {% extends "base.html" %}
> {% load mezzanine_tags keyword_tags %}
>
>
> {% block meta_title %}
> {{ project.meta_title }}
> {% endblock %}
>
>
> {% block meta_keywords %}
> {% metablock %}
> {% keywords_for project as tags %}
> {% for tag in tags %}{% if not forloop.first %}, {% endif %}{{ tag }}{%
> endfor %}
> {% endmetablock %}
> {% endblock %}
>
>
> {% block meta_description %}
> {% metablock %}{{ project.description }}{% endmetablock %}
> {% endblock %}
>
>
> {% block title %}
> {{ project.title }}
> {% endblock %}
>
>
> {% block main %}
> {{ project.content }}
> {% endblock %}
>
> But I'm not sure where to go from here. How do I transfer the slug to
> `project_detail.html` so it knows where to look? In this case, I'd have a
> folder named `slugs` in the same directory as `project_detail.html`. And
> `slugs` would have templates named after slugs.
>
--
You received this message because you are subscribed to the Google Groups
"Mezzanine Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.