fairdm.views.base#
Base views that add SEO metadata to the django-mvp views.
Module Contents#
Classes#
Template-only page with AdminLTE layout and SEO metadata support. |
|
Paginated, filterable list page with card layout and SEO metadata support. |
|
Object detail page with AdminLTE layout and SEO metadata support. |
|
Object creation form with AdminLTE layout and SEO metadata support. |
|
Object update form with AdminLTE layout and SEO metadata support. |
|
Object deletion confirmation page with AdminLTE layout and SEO metadata support. |
|
Filtered table list page with AdminLTE layout and SEO metadata support. |
API#
- class FairDMTemplateView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPTemplateViewTemplate-only page with AdminLTE layout and SEO metadata support.
Extends :class:
mvp.views.MVPTemplateViewwith :class:meta.views.MetadataMixinto inject Open Graph / Twitter Card metadata into every response. Use this as the base class for any FairDM page that renders a static or lightly dynamic template and needs SEO metadata — instead of Django’sTemplateVieworMVPTemplateViewdirectly.Context: meta: Injected by
MetadataMixin. Contains Open Graph, Twitter Card, and Schema.org metadata derived from view-level attributes such astitle,description,image, andkeywords. See :class:meta.views.MetadataMixinfor the full attribute list. page (dict): AdminLTE page configuration —title,subtitle,icon,class,breadcrumbs. Injected byPageMixinviaMVPTemplateView.Example::
from fairdm.views import FairDMTemplateView class AboutView(FairDMTemplateView): template_name = "myapp/about.html" title = "About Us" description = "Learn about our research data portal."Initialization
- template_name#
‘page_view.html’
- class FairDMListView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPListViewPaginated, filterable list page with card layout and SEO metadata support.
Extends :class:
mvp.views.MVPListViewwith :class:meta.views.MetadataMixin. Use this as the base class for any FairDM list page that displays objects as cards or custom list items. The search, the sort and the filters all come from onefilterset_class.For tabular data display (rows and columns), use :class:
FairDMTableViewinstead.Config: paginate_by (int): Number of objects per page. Default:
25. grid (dict): Responsive grid configuration passed to the template asgrid_config. Keys map to CSS breakpoint helpers (e.g.,{"cols": 1, "gap": 2}). Default:{"cols": 1, "gap": 2}. list_item_template (str | None): Explicit path to the partial template rendered for each list item. WhenNone, auto-derived from the model as"<app_label>/<model_name>_list_item.html". Default:None. filterset_class: Adjango_filters.FilterSetsubclass holding the page’s search (mvp.filters.SearchFilter), sort (mvp.filters.SortFilter) and filters. Default:None. toolbar_filters (list[str]): Names of the filterset fields drawn in the toolbar. The others sit in the filter panel. Default:[].Override hooks: get_queryset(): Return the base queryset (add
select_related/prefetch_relatedhere for performance). get_grid_config(): Return the grid breakpoint dict. get_list_item_template(): Return the item partial template path. get_empty_state_heading() / get_empty_state_message(): Customise the empty-state UI.Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). grid_config (dict): Grid breakpoint configuration fromgrid. list_item_template (str): Resolved item partial template path. empty_state (dict):{"heading": str, "message": str}. page (dict): AdminLTE page metadata fromPageMixin. filter: ActiveFilterSetinstance (whenfilterset_classset). object_list: The paginated queryset.Example::
import django_filters from mvp.filters import SearchFilter, SortFilter from fairdm.views import FairDMListView from .models import Project class ProjectFilter(django_filters.FilterSet): q = SearchFilter(fields=["name", "uuid"]) o = SortFilter(options=[("name", "Name (A-Z)", ["name", "pk"])]) class Meta: model = Project fields = ["status"] class ProjectListView(FairDMListView): model = Project filterset_class = ProjectFilter toolbar_filters = ["q", "status"] grid = {"cols": 1, "sm": 2, "lg": 3}Initialization
- paginate_by#
25
- grid#
None
- class FairDMDetailView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPDetailViewObject detail page with AdminLTE layout and SEO metadata support.
Extends :class:
mvp.views.detail.MVPDetailViewwith :class:meta.views.MetadataMixin. Use this as the base class for any FairDM page that displays a single model instance — instead of Django’sDetailVieworMVPDetailViewdirectly.Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). Set view-level attributes such astitle,description, andimageto populate Open Graph and Twitter Card tags. object: The model instance being displayed. page (dict): AdminLTE page metadata. The default page title is derived fromstr(self.object)viaMVPDetailView.Example::
from fairdm.views import FairDMDetailView from .models import Project class ProjectDetailView(FairDMDetailView): model = ProjectInitialization
- class FairDMCreateView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPCreateViewObject creation form with AdminLTE layout and SEO metadata support.
Thin composition of :class:
mvp.views.edit.MVPCreateViewwith :class:meta.views.MetadataMixin. Adds no attributes of its own; all configuration is inherited from the parent classes. Use this as the base class for any FairDM create view — instead of Django’sCreateVieworMVPCreateViewdirectly.Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). form: The model form instance. page (dict): AdminLTE page metadata. Default page title is"Create <Verbose Name>"viaMVPCreateView.Example::
from fairdm.views import FairDMCreateView from .models import Dataset class DatasetCreateView(FairDMCreateView): model = Dataset fields = ["name", "description", "visibility"] success_url = "list" # CRUD shorthand resolved by MVPCreateViewInitialization
- class FairDMUpdateView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPUpdateViewObject update form with AdminLTE layout and SEO metadata support.
Extends :class:
mvp.views.edit.MVPUpdateViewwith :class:meta.views.MetadataMixin. Use this as the base class for any FairDM edit/update view — instead of Django’sUpdateVieworMVPUpdateViewdirectly.Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). form: The bound model form instance. object: The model instance being updated. delete_url (str): URL for the delete action, injected when the delete view is registered (seeMVPUpdateView). page (dict): AdminLTE page metadata. Default page title is"Update <Verbose Name>"viaMVPUpdateView.Example::
from fairdm.views import FairDMUpdateView from .models import Dataset class DatasetUpdateView(FairDMUpdateView): model = Dataset fields = ["name", "description", "visibility"] success_url = "detail" # CRUD shorthand resolved by MVPUpdateViewInitialization
- class FairDMDeleteView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.views.MVPDeleteViewObject deletion confirmation page with AdminLTE layout and SEO metadata support.
Extends :class:
mvp.views.edit.MVPDeleteViewwith :class:meta.views.MetadataMixin. Use this as the base class for any FairDM deletion confirmation view — instead of Django’sDeleteVieworMVPDeleteViewdirectly.Config: success_url (str): Required. URL to redirect to after deletion. Accepts literal URL paths or CRUD shorthands (e.g.
"list").Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). object: The model instance to be deleted. page (dict): AdminLTE page metadata.Example::
from fairdm.views import FairDMDeleteView from .models import Dataset class DatasetDeleteView(FairDMDeleteView): model = Dataset success_url = "list" # CRUD shorthand resolved by MVPDeleteViewInitialization
- get_back_url() str#
Return a safe
?backURL, else :meth:get_back_url_fallback.
- get_back_url_fallback() str#
Point “Back” at the registered list page when
?backis unusable.
- class FairDMTableView(**kwargs)#
Bases:
meta.views.MetadataMixin,mvp.integrations.django_tables.views.MVPTableViewFiltered table list page with AdminLTE layout and SEO metadata support.
Extends :class:
mvp.integrations.django_tables.views.MVPTableViewwith :class:meta.views.MetadataMixin. Use this when objects should be displayed in a rows-and-columns table (powered bydjango-tables2) rather than as cards or custom list items.For card-style or custom-item list pages, use :class:
FairDMListViewinstead.Config: table_class (type): Required. A
django_tables2.Tablesubclass that defines the columns to display. filterset_class: Adjango_filters.FilterSetsubclass for column filtering. Optional but strongly recommended. template_name (str): The template responsible for rendering the{{ table }}object. The template must explicitly render the table — no automatic table rendering is provided. paginate_by (int): Number of rows per page. Default:100.paginate_byis the only page-size control a table view has —MVPTableViewswitches pagination off entirely when it is unset, and passes it explicitly when it is set, which takes precedence overTable.Meta.per_page.Context: meta: SEO metadata object (see :class:
meta.views.MetadataMixin). table: The rendereddjango_tables2.Tableinstance. filter: ActiveFilterSetinstance (whenfilterset_classset). page (dict): AdminLTE page metadata.Example::
import django_tables2 as tables from fairdm.views import FairDMTableView from .filters import MeasurementFilter from .models import Measurement class MeasurementTable(tables.Table): class Meta: model = Measurement fields = ["name", "value", "unit", "created"] class MeasurementTableView(FairDMTableView): model = Measurement table_class = MeasurementTable filterset_class = MeasurementFilter template_name = "measurements/measurement_table.html"Initialization
- paginate_by#
100