Pretty URLs
A Pretty URL is designed to transform a default URL with query strings into a more user-friendly and search engine-optimized format, enhancing both readability and SEO performance.
Pretty URL Model
Parameter | Type | Description |
---|---|---|
old_path | string | The original URL containing query strings. |
new_path | string | The new SEO-optimized URL. |
func_name | string | The view function used to serve the URL (e.g., ProductDetailPageApiView ). |
func_module | string | The file name where func_name is defined. |
func_initkwargs | JSON | Keyword arguments passed to the view function. |
viewname | string | The URL name associated with old_path (e.g., product ). |
args | list | The positional arguments parsed from the URL and passed to the view. |
kwargs | JSON | The keyword arguments parsed from the URL and passed to the view. |
query_params | JSON | The query parameters extracted from old_path . |
parent | Pretty URL Model | The generated Pretty URL for the default language in multi-language setups. |
language | string | The language used to slugify values of UrlGeneratorConfig placeholders to generate new_path . |
Automatic Pretty URL Generation
When an object of any of the following data models is created, a Pretty URL object is automatically generated for the default language. If multi-language support is enabled, a Pretty URL is generated for each language, with the default language's Pretty URL serving as the parent. These Pretty URLs are then attached to the created object.
Supported data models:
Product
CategoryNode
SpecialPage
LandingPage
CategoryNodeLandingPage
Form
URL Generation with UrlGeneratorConfig
If a UrlGeneratorConfig
object exists, the new_path
is generated using the template
and config
fields of that object. The placeholders in the template are slugified and interpolated with corresponding values.
Example UrlGeneratorConfig
object:
{
"template": "{test}-{test2}",
"config": {
"test": "name",
"test2": "sku"
},
"content_type": {
"pk": 1,
"model": "product"
}
}
- The
content_type
field specifies the model to which the configuration applies, indicating the type of content or entity that the configuration settings will affect. When a request is made to Omnitron using the endpoint/api/v1/remote/{channel_id}/content_types/
, Omnitron processes the request and returns a response that includes thecontent_type
field. - The keys in the
config
field correspond to placeholders in thetemplate
, and the values map to the fields of the created object.
Example: For a product created with the following attributes:
{
"name": "Kırmızı Erkek Gömlek",
"sku": "5649202702"
}
The new_path
for the generated Pretty URL would be kirmizi-erkek-gomlek-5649202702
.
Default Templates for Data Models
If no UrlGeneratorConfig
is provided, default templates are used for each data model:
Data model | Template |
---|---|
Product | {slug}-{color} |
CategoryNode | {slug} |
SpecialPage | {url} |
LandingPage | {url} |
CategoryNodeLandingPage | {url} |
Form | {url} |
NOTE
All endpoints require authentication. Ensure the header is set as specified before sending a request.
Refer to the Login documentation to obtain the authorization key.
GET
List Pretty URLs
This method is used to retrieve a list of Pretty URL objects.
Path: https://{commerce_url}/api/v1/pretty_urls/
Headers:
{
"Authorization": "Token {key}",
"Content-Type": "application/json"
}
Request Parameters
Parameter | Type | Description |
---|---|---|
created_date__gt | date | Retrieve objects created after this date. |
created_date__gte | date | Retrieve objects created on or after this date. |
created_date__lt | date | Retrieve objects created before this date. |
created_date__lte | date | Retrieve objects created on or before this date. |
modified_date__gt | date | Retrieve objects modified after this date. |
modified_date__gte | date | Retrieve objects modified on or after this date. |
modified_date__lt | date | Retrieve objects modified before this date. |
modified_date__lte | date | Retrieve objects modified on or before this date. |
language | string | Filter by language. |
new_path | string | Filter by the new URL path. |
new_path__exact | string | Filter by the exact value of the new URL path. |
old_path | string | Filter by the old URL path. |
path | string | Looks up in new_path first; if not found, searches in old_path . |
parent | int | Filter by the id of the parent Pretty URL. |
NOTE
If a parameter not listed above is provided, the first page of all objects will be returned.
Example Response (200 OK)
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"pk": 4180,
"new_path": "/testtest/",
"old_path": "/special-page/17/",
"parent": null,
"language": "tr-tr",
"func_module": "omnishop.cms.resources.views",
"func_name": "SpecialPageView",
"func_initkwargs": {},
"args": [],
"kwargs": {
"special_page_id": "17"
},
"query_params": {},
"viewname": "special-page-detail",
"created_date": "2019-11-05T08:18:19.488976Z",
"modified_date": "2019-11-05T08:18:19.489008Z",
"prettyurl_set": []
}
]
}
GET
Retrieve a Pretty URL
This method is used to retrieve a single Pretty URL by its primary key (pk).
Path: https://{commerce_url}/api/v1/pretty_urls/{pk}
Example Response (200 OK)
{
"pk": "<pk>",
"new_path": "<new_path>",
"old_path": "<old_path>",
"parent": null,
"language": "tr-tr",
"func_module": "omnishop.products.resources.views",
"func_name": "ProductDetailPageApiView",
"func_initkwargs": {},
"args": [],
"kwargs": {
"product_id": "1924"
},
"query_params": {},
"viewname": "product",
"created_date": "2017-01-24T10:32:10.487793Z",
"modified_date": "2017-01-30T17:05:10.327456Z",
"prettyurl_set": []
}
POST
Create a Pretty URL
Path: https://{commerce_url}/api/v1/pretty_urls/
This method is used to create a new Pretty URL.
Request Body
{
"old_path": "<old_path>",
"new_path": "<new_path>"
}
Example Responses
200 OK:
{
"pk": 4186,
"new_path": "<new_path>",
"old_path": "<old_path>",
"parent": null,
"language": "tr-tr",
"func_module": "omnishop.products.resources.views",
"func_name": "ProductDetailPageApiView",
"func_initkwargs": {},
"args": [],
"kwargs": {
"extra_query_params": {},
"product_id": "4"
},
"query_params": {},
"viewname": "product",
"created_date": "2023-09-20T13:39:52.562534Z",
"modified_date": "2023-09-20T13:39:52.562610Z",
"prettyurl_set": []
}
406 Not Acceptable:
{
"non_field_errors": "Url <old_path> bulunmuyor.",
"error_code": "pretty_url_100_2"
}
{
"non_field_errors": "<new_path> - <language> pretty url mevcut.",
"error_code": "pretty_url_100_1"
}
PATCH
Update a Pretty URL
This method is used to ppdate the new_path
and/or old_path
fields of an existing Pretty URL.
NOTE
The PUT method functions similarly to PATCH but requires both new_path
and old_path
to be provided.
Path: https://{commerce_url}/api/v1/pretty_urls/{pk}
Request Body
{
"old_path": "<old_path>",
"new_path": "<new_path>",
}
Example Responses
200 OK:
{
"pk": 1432,
"new_path": "<new_path>",
"old_path": "<old_path>",
"parent": null,
"language": "tr-tr",
"func_module": "omnishop.products.resources.views",
"func_name": "ProductDetailPageApiView",
"func_initkwargs": {},
"args": [],
"kwargs": {
"product_id": "1924"
},
"query_params": {},
"viewname": "product",
"created_date": "2017-01-24T10:32:10.487793Z",
"modified_date": "2023-09-20T19:37:52.976216Z",
"prettyurl_set": []
}
406 Not Acceptable:
{
"non_field_errors": "Url <old_path> bulunmuyor.",
"error_code": "pretty_url_100_2"
}
{
"non_field_errors": "<new_path> - <language> pretty url mevcut.",
"error_code": "pretty_url_100_2"
}
DELETE
Delete a Pretty URL
This method is used to delete a Pretty URL by its primary key (pk).
Path: https://{commerce_url}/api/v1/pretty_urls/{pk}
Example Responses
204 No Content:
204 No Content successful response status code indicates that a Pretty URL has been deleted.
406 Not Acceptable:
{
"non_field_errors": "Cannot delete some instances of model 'PrettyUrl' because they are referenced through a protected foreign key: 'Product.pretty_url': <QuerySet [<Product: [Bad Unicode data]>]>"
}